Apache稼働中のサーバにnginxを追加する場合のポート設定
前程として1台のサーバのport80で既にApacheが稼働している状態で
nginxを追加して、nginxをフロントにバックにApacheを置いてproxyでつなぎたい場合。
Apacheがport80をListenしている状態では、nginxはどうしても別ポートにする必要がある。
nginx(8080) -> Apache(80)
ただ、これだと通常のWebでは使いずらい。
nginx(80) -> Apache(8080)
こっちのほうが一般的だと思うが、Apacheの再設定の必要が出てくる。
特にバーチャル設定で複数ホスト設定している場合は変更が結構手間になる。
そこで、iptables のPREROUTINGを使う。
iptables(80) -> nginx(8080) -> Apache(80)
こういう形にするとApacheに手を入れずにnginxをフロントに置ける。
# /etc/sysconf/iptables *nat :PREROUTING ACCEPT [466:35427] :POSTROUTING ACCEPT [27:3255] :OUTPUT ACCEPT [27:3255] -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 COMMIT
# /etc/nginx/conf.d/default.conf listen 8080 default_server; listen [::]:8080 default_server; #proxy_set 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 / { proxy_pass http://{サーバのIP}:80; }