Nginxでリバースプロキシを設定し、Apacheと共存させる

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/または/usr/lib64/httpd/modules/にコピーされる。

また、httpd.confに

LoadModule <上記パス>

が追記される。

 

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

ssl.confがない場合、httpdでsslを利用するのに必要なmod_sslがインストールされていないため、これをインストール。

# yum install mod_ssl

以上の設定で、Nginxをリバースプロキシとして、一部の通信をApacheに転送することが可能。

 

5. 補足(mod_rpafの利用)

mod_rpafをインストールする場合は、ここが参考になる。

 

■参考文献


Nginxでリバースプロキシを設定し、Apacheと共存させる” への1件のコメント

  1. ピンバック: さくらVPS:Nginx + Apache 構成の設定方法 | ブレン

コメントは受け付けていません。