Nginx + php-fpm「504ゲートウェイタイムアウト」エラー(負荷がほぼゼロ)(テストサーバー上)


29

6時間デバッグした後、これを放棄しています:|

LANにはnginx + php-fpm + mysqlがあり、ほぼ100個のワードプレスがあります(テストワードプレスのセットアップに取り組んでいるさまざまなデザイナー/開発者によって作成および使用されています)。

長い間問題なくnginxを使用しています。

今日、突然-nginxは「504 Gateway Time-out」を突然返し始めました...

仮想ホストのnginxエラーログを確認しました...

2010/09/06 21:24:24 [error] 12909#0: *349 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:11 [error] 12909#0: *349 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:11 [error] 12909#0: *443 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:12 [error] 12909#0: *443 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:08:32 [error] 12909#0: *1025 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:33 [error] 12909#0: *1025 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:40 [error] 12909#0: *1064 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:40 [error] 12909#0: *1064 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:24:44 [error] 12909#0: *1313 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:24:53 [error] 12909#0: *1313 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"

TCPモードでポート9000でphp-fpmを実行すると、「netstat | grep 9000」を実行し、異常なことに気づきました... (読みやすくするために、ここに部分的な出力を貼り付けました)

tcp        9      0 localhost:9000          localhost:36094         CLOSE_WAIT  14269/php5-fpm  
tcp        0      0 localhost:46664         localhost:9000          FIN_WAIT2   -               
tcp     1257      0 localhost:9000          localhost:36135         CLOSE_WAIT  -               
tcp     1257      0 localhost:9000          localhost:36125         CLOSE_WAIT  -               
tcp        9      0 localhost:9000          localhost:36102         CLOSE_WAIT  14268/php5-fpm  
tcp        0      0 localhost:46662         localhost:9000          FIN_WAIT2   -               
tcp      745      0 localhost:9000          localhost:46644         CLOSE_WAIT  -               
tcp        0      0 localhost:46658         localhost:9000          FIN_WAIT2   -               
tcp     1265      0 localhost:9000          localhost:46607         CLOSE_WAIT  -               
tcp        0      0 localhost:46672         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1257      0 localhost:9000          localhost:36119         CLOSE_WAIT  -               
tcp     1265      0 localhost:9000          localhost:46613         CLOSE_WAIT  -               
tcp        0      0 localhost:46646         localhost:9000          FIN_WAIT2   -               
tcp     1257      0 localhost:9000          localhost:36137         CLOSE_WAIT  -               
tcp        0      0 localhost:46670         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1265      0 localhost:9000          localhost:46619         CLOSE_WAIT  -               
tcp     1336      0 localhost:9000          localhost:46668         ESTABLISHED -               
tcp        0      0 localhost:46648         localhost:9000          FIN_WAIT2   -               
tcp     1336      0 localhost:9000          localhost:46670         ESTABLISHED -               
tcp        9      0 localhost:9000          localhost:36108         CLOSE_WAIT  14274/php5-fpm  
tcp     1336      0 localhost:9000          localhost:46684         ESTABLISHED -               
tcp        0      0 localhost:46674         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1336      0 localhost:9000          localhost:46666         ESTABLISHED -               
tcp     1257      0 localhost:9000          localhost:46648         CLOSE_WAIT  -               
tcp     1336      0 localhost:9000          localhost:46678         ESTABLISHED -               
tcp        0      0 localhost:46668         localhost:9000          ESTABLISHED 12909/nginx: wo             

以下に強調表示されているように、「CLOSE_WAIT」と「FIN_WAIT2」のペアが多数あります(上記の出力)。

tcp     1337      0 localhost:9000          localhost:46680         CLOSE_WAIT  -               
tcp        0      0 localhost:46680         localhost:9000          FIN_WAIT2   -

上記のポート46680に注意してください。

mysqlスロークエリエラーログを有効にしましたが、機能しませんでした。

現在のところ、cronjobを介して毎分php5-fpmを再起動し(以下のコマンドを参照)、すべてを「スムーズに」実行し続けていますが、パッチワークが嫌いで、これを解決したいです...

1 * * * * service php5-fpm restart > /dev/null

Googleで広範囲に検索しました-助けは得られませんでした。前述のように、これはLANのテストサーバーであり、CPU負荷が0.10を超えることはなく、メモリ使用量も25%未満です(システムには2GB RAMとubuntu-serverがインストールされています)。少なくともヒントをドロップします。

助けてくれてありがとう。

-ラーフル

(注-これはの再投稿された- http://forum.nginx.org/read.php?11,127694

更新:答えを見つけました。これは以下に掲載されています。

回答:


31

私はnginxフォーラムへの投稿で答えを見つけました-http://forum.nginx.org/read.php? 2,127854

私の場合、答えは以下を設定することです。

request_terminate_timeout=30s

php-fpm config(通常/etc/php5/fpm/php-fpm.conf

30秒以外の値も使用できることに注意してください。

メインphp.iniファイルの値と一致させるために使用しました。

max_execution_time = 30

皆さんありがとう。:-)


5
この構成は、www.confファイルにもあります。答えをありがとう、しかし、これはトリックを行ったようです。
eddiemoya

2
これはプールレベルのディレクティブであり、php-fpm.confの[global]セクションに配置しようとするとエラーメッセージが表示されます。そこにプール設定もある場合にのみ機能します。また、request_terminate_timeout docs
タニウス

これが私が本当に必要とする正解である場合、今週の金曜日は2015年のベストです。
フィリップ

2
私は入れていることを見つけrequest_terminate_timeout=30s、私の中にphp-fpm.confファイルが(111接続拒否)エラーの原因となりました。www.confファイルに移動したときに機能しました。
AJB

CentOS 7.2でphp7を使用する場合、request_terminate_timeoutは次の場所にあります。/etc/php-fpm.d/www.conf
nadavkav

16

ここで私の問題をどのように解決しましたか:

http {セクションの/etc/nginx/nginx.confに次の変更を加えます。

proxy_connect_timeout  600s;
proxy_send_timeout  600s;
proxy_read_timeout  600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;

その後、nginxを再起動します

/etc/init.d/nginx restart


2
ええ、それは本当に質問をしている人が持っている問題とは何の関係もないように見えます。
HopelessN00b

3
しかし幸いなことに、私はそれが必要でした:)
luchaninov

これで問題は解決しませんでしたが、タイムアウトメッセージの代わりに実際のエラーを確認できるため、実際の問題につながりました。
マイケル

4

PHP 5.3を使用している場合、バックログを増やします。

PHP 5.2を使用している場合は、パッチをバックポートして、バックログサイズを128から増やします。

また、TCPソケットではなくUNIXソケットを使用します。unix:/tmp/php5-cgi.sock(または関連するパス)


特に、Unixソケットの使用法に同意する必要があります。
マット

答えてくれてありがとう。nginxメーリングリストで解決策を見つけました。
rahul286

@ rahul286どちらが答えますか?興味がある!
ブレチ

-以下の私のANSER参照@breiti serverfault.com/a/179136/17440
rahul286

3

まことにありがとうございます

request_terminate_timeout = 30s

それは私にとって完璧に機能します

しかし、このファイルに「/etc/php5/fpm/pool.d/www.conf」という行を挿入する必要がありました。これは「Worker Section」にあります。

PHP 5.3.21-1-Wordpress 3.5.1

http://php-fpm.org/wiki/Configuration_File


あなたのレシピが魔法のトリックをした502エラーを引き起こす要因の組み合わせがありました!本当にありがとうございます!
ホルヘビセンテメンドーサ

2

私の場合(同じnginxエラーメッセージ)、いくつかの問題のあるphpスクリプトは実行を終了せず、何かを待っていないため、ngginxが選択するphp5-fpmの子はありません。

修正:

  1. この投稿で言及されている実行時間制限を追加します。 request_terminate_timeout=30s
  2. 子供の数を増やします。そしてすべてが魅力のように働きました。 pm.max_spare_servers=16 pm.min_spare_servers=2

今ではすべてが魅力のように機能しました。


phpスクリプトで長時間実行されている外部接続要求がありました。長時間実行されているタスクを探し、タイムアウトを設定します。
アリナダリザデ

1

私は同じ問題を抱えていたので、Apacheを完全に削除することで解決しました。

yum remove httpd

その後、PHPとNGINXの両方を見直すことをお勧めします。

/etc/init.d/nginx restart
/etc/init.d/php-fpm restart

1
サーバーにはApacheがありませんでした。それが将来私たちを助けるかもしれないのであなたのケースを知ってうれしい。
rahul286

0

私にとって、サーバーからrabbitmqを削除した後に同じ問題が発生しました。上記のどれも役に立たなかったので、すべてのphp5モジュールを再インストールすると問題は解決しました。そのサーバーにはDebian 8.2がありました。誰かに役立つことを願っています。


-1

これはまた人々を助けるかもしれません:

設定によっては、fastcgi構成パラメーターとphpを確認する必要があります...私の場合(私はapache2 + php5-fpmを使用しています)、max_execution時間はfastcgiモジュールが応答を待つ時間にも依存します( -idle-timeout)...

http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html#FastCgiExternalServer


なぜapache2を使用するのですか?つまり、ngginxを直接使用してphp5-fpmと対話できるということです。nginxがあれば、Apacheを使用する必要はありません!
rahul286

あなたがnginxを使用している場合、他の人がnginxを使用していない場合、うまくいけばこれが彼らを助けるでしょう。:-) ... Apache2 + php5-
fpm

OK。過去にポプルが使用していたように、PHPスクリプトにApacheでNginxを使用していると思いました。
rahul286
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.