2011/09/18

nginxとapacheの連携

nginxは静的ファイルに強いらしい。
なので、動的にさばくもの(phpとか)はapache、静的にさばくもの(jsとかcssとか)はnginxを使うことにした。

■参考サイト
KAYACさん
http://kray.jp/blog/nginx/


まず、yumのリポジトリにはnginxはないので、redhadの拡張パッケージ(EPELというらしい)を追加します。
http://download.fedora.redhat.com/pub/epel/5/i386/
rpm -ivh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
yum -y install nginx


次に、httpd-devel最新版をいれときます。これは、あとで使うmod_rpaf用です。
yum -y install httpd-devel

リバースプロキシを経由させるとリモートホストのアドレスが127.0.0.1になっちゃうらしい。
そうするとアクセス解析するときとか困っちゃうので、プロキシを経由したリクエストのアドレスを記録した
X-Forwarded-Forをホスト名で上書きしてくれないといけないらしい。
詳しく解説されている方がいるのでhttp://www.namazu.org/~takesako/diary/?date=20031205を見てください。

mod_rpafは、現時点では0.6が最新なので、0.6を入れます。
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar xzf mod_rpaf-0.6.tar.gz 
cd mod_rpaf-0.6
なぜかMakefileにapxのパスを書かないといけない。
which apx
vi Makefile
APXS2=/usr/sbin/apxs
make rpaf-2.0
sudo make install-2.0


■とりあえずインストール作業が済んだら、apacheとnginxの設定ファイルをいじります。
apache側のポート番号は、何でも良いはず(今回はKAYACさんの記事に合わせました)。
ポート番号は、
lsof -i | grep {ポート番号}
とか
netstat -na | grep {ポート番号}
で調査できると思います。


まず、ginx.confの修正。
vi /etc/nginx/nginx.conf

以下を追記します。
location ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) {
    root    /var/www/vhosts/kray.jp/htdocs;
    index   index.html;
    ssi     on;
    break;
}

location / {
    proxy_pass  http://127.0.0.1:8082;
    break;
}



■次に、httpd.confの修正。
mod_rpafのロードを追記。
vi /etc/httpd/conf/httpd.conf
LoadModule rpaf_module modules/mod_rpaf-2.0.so

バーチャルホストの設定を追記。

  ServerName kray.jp
  DocumentRoot /var/www/vhosts/kray.jp/htdocs

  RPAFenable On
  RPAFsethostname On
  RPAFproxy_ips 127.0.0.1 10.0.0.1
  RPAFheader X-Forwarded-For



設定ファイル確認して
/usr/sbin/apachectl configtest

apache起動して
/usr/sbin/apachectl stop
/usr/sbin/apachectl start

nginxも起動する
/etc/init.d/nginx start




■ハマったこと
httpd.confのチェックするときに、エラー発生。
/usr/sbin/apachectl configtest

Syntax error on line 1000 of /etc/httpd/conf/httpd.conf:
Invalid command 'RPAFenable', perhaps misspelled or defined by a module not included in the server configuration
→モジュールがロードされていなかったので
LoadModule rpaf_module modules/mod_rpaf-2.0.so
をhttpd.confに追記して解決しました。