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;
    }