nginxとapacheでリバーシプロキシとCGIを動かす

nginxは小さくて速いという話を聞きました。
そこでnginxで静的コンテンツをapacheで動的コンテンツを処理するようにしました。
(nginxはcgiを処理できないのでapacheを使います)
覚え書きと思い込みが多いと思うので間違いがあれば教えて下さい。


さっそくnginxをどうやっていれたか忘れたのですが

sudo apt-get install nginx
/etc/init.d/nginx start

これでインストールできて立ち上がるはずです。


nginxの設定ファイルは以下のようになります。

# /etc/nginx/conf.d/vhost.conf
server {
       listen 80;
       server_name hogehoge.com;

       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $http_host;
       proxy_redirect off;
       proxy_max_temp_file_size 0;

       location / {
                root /var/www
                break;
       }         
                                                              
       location /cgi-bin {
                proxy_pass http://127.0.0.1:8082;
                break;
       }
}

proxy~の部分でapacheにアクセス元の情報を渡します。
(通常はnginxの情報がapacheに渡ってしまいます)


動的コンテンツを処理するapacheの設定は以下になります。
まずはnginxがリバースプロキシになるのでapachのポート80設定をコメントアウトします。

# /etc/apache2/ports.conf
#NameVirtualHost *:80
#Listen 80

そしてapacheの設定ファイルを以下のようにします。

# /etc/apache2/site-available/mysite
NameVirtualHost 127.0.0.1:8082

Listen 8082

<VirtualHost 127.0.0.1:8082>
  ServerName hogehoge.com
  DocumentRoot /var/www/

  RPAFenable On
  RPAFsethostname On
  RPAFproxy_ips 127.0.0.1
  RPAFheader X-Forwarded-For
</VirtualHost>

RPAF~はapacheからアクセス元の情報を取得できるようにするモジュールで、
RPAF~を使えるようにするためにはdebianの場合以下のようにします。

sudo apt-get install libapache2-mod-rpaf
sudo a2enmod rpaf

CentOSの場合は以下を参照

はてなダイアリー


これで動的コンテンツの処理だけapacheに任せられて快適です。
いずれapachestarmanとかに変えていければと思います。
後、なぜか設定が反映されないなと思っていたらキャッシュされていました。
今回の変更でapacheの設定が見直せてよかったです!

ウノウラボ by Zynga Japan: Tips for nginx
軽量高速Webサーバのnginxで静的コンテンツ配信とキャッシュコントロール | KRAY Inc