前書き
どうせならNginxをリバースプロキシとして立てて、静的なコンテンツは全部Nginx、動的なコンテンツはApacheにパス、みたいな構成をやりたかったので。
セットアップ
前準備
衝突を避けるためApacheのポートは前もって80番から変えておきます。
$ grep ^Listen /etc/httpd/conf/httpd.conf
Listen 8080
インストール
$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
$ cat /etc/yum.repos.d/nginx.repo
# nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
$ sudo yum install nginx
起動と確認
$ sudo service nginx start
ブラウザでアクセスして
「Welcome to nginx!」
って出てきたらOK。
リバースプロキシ設定
$ sudo vim /etc/nginx/conf.d/reverse_proxy.conf
いろいろ試行錯誤しましたが、結局こんな感じで設定しました。
ちなみにdefault.confの中身は全部コメントアウトしました。
/etc/nginx/conf.d/reverse_proxy.conf
server {
listen 80;
server_name localhost;
error_page 404 /e/404.html;
error_page 500 502 503 504 /e/50x.html;
location /e/ {
root /usr/share/htdocs/error;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* ^/(static|icons)/ {
root /usr/share/htdocs/default;
index index.html;
}
}
これでstaticとiconディレクトリ以下にアクセスした時はnginxが直接返し、それ以外のときはApacheに流す、の流れになった模様。
一応アクセスログも見て確認できました。
ちょっとエラーページ周りの設定が微妙だけど、そこは目を瞑る。
とりあえずデフォルトのエラーページ出したくなかったんや。。。
mod_rpaf
このままだとApache側でアクセス元アドレスが取れないとか不都合が出るので、その辺りを修正していく。
$ sudo yum install httpd-devel
$ mkdir mod_rpaf-0.6
$ cd mod_rpaf-0.6
$ wget https://raw.github.com/ttkzw/mod_rpaf-0.6/master/mod_rpaf-2.0.c
$ sudo apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
$ sudo vim /etc/httpd/conf.d/mod_rpaf.conf
$ sudo cat /etc/httpd/conf.d/mod_rpaf.conf
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
RPAFheader X-Forwarded-For
$ sudo service httpd restart
完了
ひとまずこれでやりたかったことは完了。
案外うまくいくもんだなー、と思いつつセキュリティ的に何か見落としてないかとか色々心配ではある。
参考