仮想CentOSのnginx+Apach2でリバースプロキシ
80番と443番で来たアクセスを nginx で処理し、Apacheの8080番に問い合わせる。
nginx(:80/:443) → Apache(:8080)
開発環境だとApacheのVirtualDocumentRootが便利なのでそれも活かしたい。
yumにリポジトリを追加してnginxをインストールする
リポジトリの追加は、 /etc/yum.repos.d に nginx.repo を作成して編集。
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1
変数で渡されている $releasever はOSのリリースバージョン、 $basearch はアーキテクチャ(x86_64とかi386が入るらしい)
Listen とか NameVirtualHost のポート番号を8080番に変更。 冒頭に書いた通り、VirtualDocumentRootを使って極力楽をする。
<VirtualHost *:8080> VirtualDcoumentRoot /home/www/%0/html <Directory /home/www/*/html> Options All AllowOverride All </Directory> </VirtualHost>
あとは、mod_ssl を設定済みならば 443 の Listen も切っておこう。 設定ファイルの末尾に ~ 等つければ読みこまなくなるのでそれが楽。
$ mv /etc/httpd/conf.d/ssl.conf /etc/httpd.conf.d/ssl.conf~
バーチャルホストにも設定が残っていたら外しておく。
CentOS版は conf.d/*.conf に設定を書く模様。 default.conf の中身消してそのまま使ってみる。
server { listen 80; location / { proxy_pass http://localhost:8080; } }
これだけだとホスト名とかその他のクライアント側からの情報がApacheに伝わらないので、 そこらへんの設定をしておく。
conf.d/ に proxy.conf とか作成。
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;
nginxさんにはSSLもお願いしたいのでそのように。
conf.d/ にすでにある example_ssl.conf を複製して使ってしまう。 ssl.conf として作成して編集。
server { listen 443; ssl on; ssl_certificate /etc/pki/tls/certs/localhost.crt; ssl_certificate_key /etc/pki/tls/private/localhost.key ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_prefer_server_ciphers on; location / { proxy_pass http://localhost:8080; } }
ssl_certificate と ssl_certificate_key は、 Apache の mod_ssl 入れた時にオマケでついてきたテスト用の証明書を使用。
これでおおむね動くはず。 ゆるゆる設定なのは仮想の開発環境だから、と言い訳しておく。
$ /etc/init.d/nginx start