Apacheを動かしながらnginxをリバースプロキシに設定するメモ

2014年12月11日

すでにApacheで動かしているサーバで,nginxのリバースプロキシ機能を利用するための
設定をしたときのメモ.

nginxの設定

接続元のIPなどを保持しておくための設定と,キャッシュのための設定をする.

http {
  ...
    # Reverse proxy settings
    proxy_headers_hash_max_size      1024;
    proxy_headers_hash_bucket_size   256;
    proxy_set_header Host               $host;
    proxy_set_header X-Real-IP          $remote_addr;
    proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host   $host;
    proxy_set_header X-Forwarded-Server $host;

    proxy_read_timeout               600s;
    proxy_connect_timeout            10s;

    proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=cache1:15m inactive=7d max_size=1000m;
    proxy_temp_path /usr/local/nginx/proxy_temp;
  ...
}

同じくキャッシュの設定と,リバースプロキシで接続し直す設定をしておく.

# Reverse proxy settings
    server {
        listen 80;
        server_name .ほげほげ;
        client_max_body_size 5m;

        location ~ .*\.(htm|html|jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) {
            root    html;
            index   index.html;
            break;
        }

        location / {
            proxy_pass http://127.0.0.1:8080;
            #proxy_redirect off;

            proxy_cache cache1;
            proxy_cache_key $scheme$proxy_host$uri$is_args$args;
            proxy_cache_valid  200 1d;
        }
    }

ポート80で受けた接続をポート8080につないだ.

apacheの設定

Listenするポートを8080にしておく.また,バーチャルホストへの接続はリバースプロキシ(自身のサーバ)からのみ受け付けるようにするため,127.0.0.1:8080に.

Listen 8080

NameVirtualHost 127.0.0.1:8080

  ...

リバースプロキシを通ってポート8080にリクエストが来るので,httpdを8080で待機させる設定をする.

mod_rpafまたはmod_extract_forwardedを入れる.mod_rpafだと.htaccessファイルによるアクセス制限ができないらしいと書いてるブログがあったが,最新の0.6だとできるようになってるという記事もあったのでよくわからない.

$ wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
$ tar zxvf mod_rpaf-0.6.tar.gz
$ cd mod_rpaf-0.6
$ sudo apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
$ curl -O http://www.openinfo.co.uk/apache/extract_forwarded-2.0.2.tar.gz
$ tar xvf extract_forwarded-2.0.2.tar.gz
$ cd extract_forwarded-2.0.2
$ sudo apxs -i -c -a mod_extract_forwarded.c

注意 → mod_rpaf のかわりに mod_extract_forwarded なるものがあるらしいAdd Star
リバースプロキシ環境下のapacheではmod_extract_forwardedよりもやっぱりmod_rpaf?
インストールしたらhttpd.confでモジュールをロードする.今回は無難そうなrpafで.

LoadModule rpaf_module modules/mod_rpaf-2.0.so

rpafの設定をhttpd.confに追記すればすべて完了.


  RPAFenable On
  RPAFsethostname On
  RPAFproxy_ips 127.0.0.1

再起動を忘れずに.

$ sudo service httpd restart
$ sudo service nginx restart

中身いじったのに全然見た目が変わらないときは,キャッシュを一度切ってから更新してみるとよい.

参考:

http://inputxoutput.com/nginx-apache-mod_php-wordpress-2/
http://tjun.org/blog/2011/09/nginx/