nginxでリバースプロキシを立てる
ローカルの8080番で動くアプリを、nginx経由で80番から公開したい。クライアントの本来のIPアドレスもアプリに正しく伝えたい。
手順
curl -s http://127.0.0.1:8080/先にプロキシ先のアプリが単体で応答することを確認する。ここが死んでいると、後の切り分けが混乱する。sudoedit /etc/nginx/conf.d/myapp.confserver{}ブロック内のlocation / に proxy_pass http://127.0.0.1:8080; を書く。あわせて proxy_set_header Host $host; と proxy_set_header X-Real-IP $remote_addr; を入れると、アプリ側で元のホスト名とクライアントIPが分かる。sudo nginx -t設定ファイルの文法テスト。reloadの前に必ず通す。ここでsyntax okが出ない設定を反映してはいけない。sudo systemctl reload nginxrestartではなくreloadを使う。既存の接続を切らずに新設定へ切り替わる。curl -s -o /dev/null -w '%{http_code}\n' http://localhost/80番経由でアプリの応答が返るか、ステータスコードで確認する。200が返れば経路は開通。sudo tail -f /var/log/nginx/error.log502が返る場合はここを見る。connect refusedならプロキシ先が落ちている、permission deniedならSELinux等の制限が典型原因。⚠
注意nginx -tを飛ばしてreloadすると、文法エラーで全サイトが道連れになる恐れがある。「-tが通ってからreload」を体に刻むこと。Debian系はconf.dでなくsites-available/sites-enabled構成の場合がある。