<目次>
(1) Apacheのリバースプロキシの設定方法をご紹介
(1-1) 設定の概要
(1-2) 設定の手順
(1-2-1) STEP1:リバースプロキシ用のモジュール確認
(1-2-2) STEP2:リバースプロキシ用のモジュール有効化
(1-2-3) STEP3:仮想ホストの新規作成
(1-2-4) STEP4:設定の反映(サービスの再起動)
(1-2-5) STEP5:疎通確認
(1) Apacheのリバースプロキシの設定方法をご紹介
(1-1) 設定の概要
リバースプロキシとは、ウェブサーバの手前でクライアントからのリクエスト(要求)を転送するサーバで、セキュリティやパフォーマンス、信頼性の向上の目的で導入されます。
リバースプロキシを導入する事により、例えばご自身の「ドメイン名」を入力するだけで、ご自身のWebサイトを表示するように改善する事ができます。
(例)
//[対応前]はポート番号やアプリケーション名を入力しないとサイトが表示されなかった・・・ [対応前] http://[Your Domain]:8080/[Your App Name] //[対応後]はドメイン名のみでサイトにたどり着ける [対応後] http://[Your Domain]/
(図311)①一般的なリバプロ
一般的なリバプロでは上記のように「リバースプロキシサーバ」1つに対して複数のアプリケーションサーバが背後に控えますが、今回はApacheとTomcatを同居させる事で、よりシンプルにしています。
(図311)②ApacheとTomcat同居の構成
(1-2) 設定の手順
(1-2-1) STEP1:リバースプロキシ用のモジュール確認
はじめにApacheのリバースプロキシ用のモジュールが有効になっているか?を確認します。
$ httpd -M
(図321)①
有効になっている事を確認するべきは下記4つのモジュールになります。
proxy_module (shared) lbmethod_byrequests_module (shared) proxy_balancer_module (shared) proxy_http_module (shared)
(図321)②
(1-2-2) STEP2:リバースプロキシ用のモジュール有効化
①設定ファイルの編集
もし上記のチェックにて有効化されていないモジュールがあった場合は、有効化を行います。「etc/httpd/conf.modules.d」配下にモジュールの有効化を制御する設定ファイルがあるため、それを編集していきます。リバースプロキシの場合は「00-proxy.conf」というファイルを設定します。
vi /etc/httpd/conf.modules.d/00-proxy.conf
(図322)①設定ファイルの場所
②モジュールの有効化
ファイルの中から該当するモジュールを探し、もしコメントアウト(#)されていたら解除して有効化します。
(図322)②モジュールの有効化
③設定の反映
$ sudo systemctl restart httpd
(1-2-3) STEP3:仮想ホストの新規作成
リバプロに必要なApacheモジュールが確認できたら、次は仮想ホストの設定を行います。仮想ホストはApacheにおいて1つのサーバで複数のドメインを運用するための技術で、仮想サーバ単位にIPを割り当てたり、ドメインを割り当てたりしてウェブサイトをホストします。
今回はその技術を使ってリバースプロキシを実現します。仮想ホストは拡張子が「.conf」のファイルで定義する事ができ、「/etc/httpd/conf.d/」配下に新規に作成する事で読み込まれます。
①設定ファイルの作成
viエディタ等で新規に仮想ホストの設定ファイルを作成します。
$ sudo vi /etc/httpd/conf.d/[任意のファイル名].conf
(図323)①
②設定ファイルの編集
仮想ホストの設定雛形の中身として、リバースプロキシの設定記述を足していきます。
<VirtualHost *:80> ProxyPreserveHost On ProxyPass / http://tennis-database.com:8080/TennisDatabase/ ProxyPassReverse / http://tennis-database.com:8080/TennisDatabase/ </VirtualHost>
(表)各設定項目の意味について
ProxyPreserveHost = [On/Off] | ・この設定をONにするとApacheはリクエストが来た元のサーバのヘッダ情報?を、裏にあるAPサーバに渡します |
ProxyPass / [My Application URL] | ・リバースプロキシの設定そのもので、クライアントのリクエストに対して、それをどこに送るか?を定義しています(行き)。 ・指定したURL配下の全て(ページや資源)に対してプロキシとして機能する事を意味します。 (例1) ・サイトのドメイン: http://sample.org/ ・プロキシ設定: ProxyPass /test/hello/ http://test.com/ ・ブラウザ入力URL: http://sample.org/test/hello/world のような条件の場合、リクエストは内部的にはプロキシリクエストに変換され「http://test.com/world」となります。つまり「ProxyPass [アプリケーションパス] [リダイレクトするドメイン]」のような記述になっています。 |
ProxyPassReverse / [My Application URL] | ・イメージとしては「戻り」のヘッダー修正。 ・背後のサーバ⇒Apache⇒クライアントブラウザへのレスポンス(戻り)のヘッダを編集するための設定です。 ・ApacheにHTTPリダイレクトレスポンスのLocationレスポンスヘッダを編集するように指示をしています。 ・これにより、背後のサーバがロケーションヘッダ(リダイレクト指示)を返却した際に、背後のサーバへリダイレクトさせるのではなく、プロキシのアドレスにリダイレクトする事を保証します。 ・例えばアプリが「localhost:8081」に配備されていたとして、ロケーションヘッダーには「http://localhost:8081/XXX/」のようなパスが記載され、Apacheがこれをブラウザに連携するが、ProxyPassReverseはそれをインターセプトし、Apacheのプロキシ設定に合うように書き換えします。 ・基本的にはProxyPassと同じ設定にします。 |
(図323)②
(1-2-4) STEP4:設定の反映(サービスの再起動)
サービスを再起動して設定を反映させます。
$ sudo systemctl restart httpd
(図324)
(1-2-5) STEP5:疎通確認
ここまでの設定が完了すると、以下の①②③の3つのURLを指定した際に、ApacheのWelcomePageの代わりに、Apacheの背後のサーバのページが応答するはずです。
①ドメイン名(例:tennis-database.com)
②ホスト名(例:http://[ホスト名])
③IPアドレス(例:http://[IPアドレス])
疎通確認として実際にブラウザから「ドメイン名」のみを入力し、ウェブサイトが表示できるか?をチェックします。
(図325)①ドメイン名(例:tennis-database.com)
(図326)②ホスト名(例:http://[ホスト名])