nginxとphp-fpmの接続がうまく行かなかった件について
nginxとfastcgiでサーバを動かそうとしてたのですが、何故かエラーでちゃんと表示されなかったので覚書。
ふつーにリクエスト送ってみてもbadgateway 502ってエラーが出てました。
原因を探ってみた
さぐってみました。
nginxのaccess.logを見てみる
access.logにはちゃんとリクエストが来てるのが表示されてます・・・
php-fpmのerror.logを見てみる
なーんもログがでてない
なんかこの時点で、nginxとphp-fpmの間に問題がありそうだとわかりますね。
具体的にはnginx.confの書き方でしょうか。
どのプロセスがどのポートをlistenしてるのか
いろいろ試してみましたが、最終的に「ポート番号に間違いがあるやも!」となり、以下コマンド打ってみました。
netstat -antp
ちなみにオプションの意味は下記です
- -a(all) すべてのソケットを表示
- -n(numeric) 名前解決を行わず、数字で出力
- -t(tcp) tcpを表示
- -p(program) プロセス(プログラム)名を表示
すると以下のように表示されました。
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2427/php-fpm: maste
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1004/nginx: master
nginxはport80を使ってますが、php-fpmはport9000を使っていますね。
nginx.confのfastcgi_passのポート番号書き間違えだった
今回のエラーはphp-fpmがlistenしているのがport9000だったのに対して、
nginx.confの設定がport80をlistenして、fastcgi_pass(php-fpmのlistenホスト・ポート)が127.0.0.1:80となっていたのが問題でした。
fastcgi_pass 127.0.0.1:9000;
上記のように修正してなおった!
コメント