NginxとApacheを共存させる場合、Nginxをリーバスプロキシにして、Apacheをバックエンドにする構成が通常。
単純にリバースプロキシを動かすと、Apache側に伝わるクライアントのIPアドレスが全てNginxのアドレスになってしまうため、この対応を入れつつ設定を行う。
1. Nginxのプロキシ設定
/usr/local/nginx/conf/nginx.confに、以下の通り追加。
server {
listen xxx.xxx.xxx.xxx;
server_name hoge.com;
# このサーバへの全てのアクセスを転送
location / {
proxy_pass http://127.0.0.1:8080;
#proxy_redirect off;
# この設定がなくても.htaccessでの制限は可能。
# ただし、cgi等から参照した際にNginxのIPアドレスになる。
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 以下は、cgi等で明示的に利用していなければ、有効にする必要なし。
#proxy_set_header X-Forwarded-Host $host;
#proxy_set_header X-Forwarded-Server $host;
# この設定がなくてもcgi等から正しいIPを確認可能。
# ただし、.htaccessでの制限は不可。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
2. Apache側でリバースプロキシ経由以外のアクセスを拒否
/etc/httpd/conf/httpd.confを変更し、Nginxからの接続のみを許可してセキュリティを上げる。
<Directory "/var/www/html">
...
# Order allow,deny
# Allow from all
Order deny,allow
Deny from all
Allow from 127.0.0.1 192.168.0.1
</Directory>
ただし、Nginxの設定でproxy_set_header X-Forwarded-Forを設定しており、かつ、後述のmod_extract_forwardedを導入している場合、クライアントの正しいIPアドレスがApacheに伝わるため、上記設定にしていると全てのアクセスをリジェクトしてしまうので要注意。
http://abeerforyou.com:8080/等へのアクセスで、Apacheのwelcomeファイルが表示されてしまう場合、/etc/httpd/conf.d/welcome.conf内を全文コメントアウトする。
前述したApacheに伝わるクライアントIPアドレスに問題がなければ、リバースプロキシの設定は、ここで終了。
3. Apacheにモジュール追加
Apache側にもクライアントの正しいIPを知るためのモジュールを導入する。
モジュールは、mod_extract_forwardedとmod_rpafがあるが、mod_rpafだと.htaccessでのアクセス制限が使えないため、mod_extract_forwardedを利用する。
/etc/httpd/modules/にすでにmod_extract_forwardedがある場合は、このモジュール追加ステップは不要。
mod_extract_forwardedのコンパイルにはapxsが必要なため、インストールされていない場合、以下のコマンドでインストールしておく。
$ yum install httpd-devel
mod_extract_forwardedのダウンロード、解凍、コンパイルとインストール。
$ curl -O http://www.openinfo.co.uk/apache/extract_forwarded-2.0.2.tar.gz $ tar zxf extract_forwarded-2.0.2.tar.gz $ cd extract_forwarded $ apxs -i -c -a mod_extract_forwarded.c
上記apxsコマンドで、モジュールがコンパイルされ/usr/lib/httpd/modules/にコピーされる。
また、/etc/httpd/modules/に上記モジュールへのシンボリックリンクが作成される。
4. Apacheの設定
/etc/httpd/conf/httpd.confのLoadModule近辺に以下を追加。
LoadModule extract_forwarded_module modules/mod_extract_forwarded.so
また、ファイルの最後に以下も追加。
MEForder refuse,accept MEFrefuse all # Nginx(リバースプロキシ)のIPアドレス MEFaccept 127.0.0.1
ここからはポートの設定。
通常、Nginxを80番ポートで実行するため、Apacheの待ち受けポートを8080等に変更する。
#Listen 80 Listen 8080
NginxとApacheの両方でHTTPSを提供している場合、こちらもポートがかぶるので、Apache側のポートを変更する。設定ファイルは、/etc/httpd/conf.d/ssl.conf。
# Apacheでsslを停止するなら、下記のようにコメントアウトでOK #Listen 443
以上の設定で、Nginxをリバースプロキシとして、一部の通信をApacheに転送することが可能。
5. 補足(mod_rpafの利用)
mod_rpafをインストールする場合は、ここが参考になる。
■参考文献
- ハイパフォーマンスHTTPサーバ Nginx入門
- mod_extract_forwarded(公式)
- mod_extract_fowarded導入
- mod_rpaf(公式)
- nginxでリバースプロキシ。
- mod_rpaf インストール手順
- CentOS5.1 に mod_rpaf をインストールする
ピンバック: さくらVPS:Nginx + Apache 構成の設定方法 | ブレン