2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Apache HTTP Serverの構築し、Tomcatに連携する手順

Last updated at Posted at 2021-03-17

目的

WebサーバとしてApache HTTP Serverをインストールし、外部からのリクエストをTomcatに連携させます。
※今回はTomcatとApacheは同じサーバ上で動作するように構築します。

構築環境

Iaas:AWS EC2
OS:RHEL-7.6_HVM_GA-20190128-x86_64-0-Hourly2-GP2(コミュニティ AMI)
Apache:2.4.6

Apache HTTP Serverをyumでインストール

$ sudo yum install httpd -y

httpd.confを設定

$ sudo vi /etc/httpd/conf/httpd.conf

1.ServerName ディレクティブ

ServerName 'サーバ名' (例)www.example.com:80

エラー画面を表示する時など、自分自身の名前を表示する際に使用されます。
設定しなかった場合、ApacheがIPアドレスから逆引きしてホスト名を検知し、ポートはリクエストを受けたポートを使用するようになります。

2.ServerTokens ディレクティブ

クライアントに送り返す、応答ヘッダ内にサーバのOS種別や組み込まれているモジュール情報を含めるかどうかを指定します。

ServerTokens Prod

3.TraceEnable ディレクティブ

TRACEメソッドでのHTTPリクエスト受け入れるか設定する項目。
XST対策のため、offを指定します。

TraceEnable off

4.<Directory> ディレクティブ

デフォルトのままだとサーバ内の/var/www/html配下がアクセス可能となり、ブラウザ上でディレクトリ一覧が表示されてしまう。
サーバ内が探索できてしまい、セキュリティ上よろしくないのでコメントアウトする。

<Directory "/var/www/html">
・・・
Options FollowSymLinks
・・・
</Directory>

5.リバースプロキシ設定

外部からのリクエストをtomcatに連携するように設定します。
今回はHTTP通信で行います。

# フォワードプロキシサーバとしての動作を有効/無効に設定します。
# Onだと公開プロキシになってしまうため、リバースプロキシとして設定する今回ではOffに設定します。 
ProxyRequests Off

# すべてのクライアントに対しアクセス許可する場合
<Proxy *>
Order deny,allow
Allow from all
</Proxy>

# 特定のクライアントのみアクセス可能にする場合
<Proxy *>
Order Deny,Allow
Deny from all
Allow from 許可するクライアントのDNSまたはIPアドレス
</Proxy>

# Tomcatにリクエストを連携する設定します。
# 後続で行うTomcatのアクセス制限を設定するとlocalhostでもアクセス出来なくなるため、
# 連携先はlocalhostではなく、ループバックアドレス(127.0.0.1)で指定します。
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/

httpdサービスを起動する

$ sudo systemctl start httpd

ストップやステータス確認するときは以下の通り
$ sudo systemctl stop httpd
$ sudo systemctl status httpd

Tomcat側の設定

1.アクセス制限

Webサーバを配置した場合、ユーザーがTomcatへの直接アクセス出来るのはセキュリティ上良くありません。
そのため、ループバックアドレスからのアクセスのみ許可するようにserver.xmlを修正します。

$ vi /opt/apache-tomcat-8.5.61/conf/server.xml 

<Host name="localhost"  appBase="webapps"  unpackWARs="true" autoDeploy="true">
  <!-- 以下のValueタグを追加します -->
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127.0.0.1" />
</Host>

SELinuxの設定

特定のディストリビューションではSELinuxがデフォルトで有効になっており、httpd_can_network_connectが無効化(off)されているため、http通信が出来ない場合があります。
そのため、httpd_can_network_connectの設定を確認し、必要があれば設定を変更します。

$ getsebool httpd_can_network_connect
httpd_can_network_connect --> off

以下の通り、httpd_can_network_connectの設定を変更して外部通信を許可します。

$ sudo setsebool -P httpd_can_network_connect=1

おわりに

以上の手順でWebサーバを通してアプリにアクセス出来れば成功です。

参考文献

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?