Nginx + php-fpm“ 504网关超时”错误,负载几乎为零(在测试服务器上)


29

经过6小时的调试-我放弃了:|

我们在局域网中有一个nginx + php-fpm + mysql,具有将近100个wordpress(由从事测试wordpres设置的不同设计师/开发人员创建和使用)

我们正在使用nginx,长期以来没有任何问题。

今天,突然之间-nginx开始突然返回“ 504网关超时” ...

我检查了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上进行了广泛搜索-没有帮助。如前所述,这是局域网中的测试服务器,CPU负载永远不会超过0.10,内存使用率也低于25%(系统已安装2GB RAM和ubuntu服务器),因此,如果您发现它的时间令人困惑,请帮帮我至少留下一个提示。

在此先感谢您的帮助。

-拉胡尔

(注意-这是-http: //forum.nginx.org/read.php? 11,127694的重新发布)

更新:我找到了答案,发布在下面。

Answers:


31

我在nginx论坛上的帖子中找到了答案-http: //forum.nginx.org/read.php?2,127854

就我而言,答案是设定:

request_terminate_timeout=30s

在php-fpm配置中(通常是/etc/php5/fpm/php-fpm.conf

注意,您也可以使用30s以外的值。

我用它来匹配我在主php.ini文件中的值:

max_execution_time = 30

谢谢大家 :-)


5
也可以在www.conf文件中找到此配置。不过,感谢您的回答,这似乎已经解决了问题。
eddiemoya

2
这是一个池级别的指令,当您尝试将其放入php-fpm.conf的[global]部分时会收到一条错误消息。只有在其中也有池配置的情况下,它才能在那里工作。另外:request_terminate_timeout docs
tanius

如果这是我真正需要的正确答案,那么本周五将是2015年最好的答案。
菲利普

2
我发现,把request_terminate_timeout=30s到我的php-fpm.conf文件引起的(111连接被拒绝)错误。当我将其移动到www.conf文件中时,它可以工作。
AJB

在使用php7的CentOS 7.2上,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重新启动


2
是的,这看起来确实与提出问题的人没有任何关系。
HopelessN00b 2012年

3
但幸运的是,这就是我所需要的:)
luchaninov

这不能解决我的问题,但是它使我看到了实际的错误,而不是超时消息,这导致我遇到了实际的问题。
迈克尔

4

如果您使用的是php 5.3,请增加积压。

如果您使用的是php 5.2,请向后移植该补丁,以使积压的大小从128开始增加。

另外,请使用unix套接字而不是TCP套接字。Unix:/tmp/php5-cgi.sock(或相关路径)


我必须同意,尤其是对于unix套接字的用法。
马特2010年

感谢karmawhore的回答。我在nginx邮件列表上找到了解决方案。
rahul286'9

@ rahul286哪个答案?我有兴趣!
breiti 2011年

@breiti见下面我的雁- serverfault.com/a/179136/17440
rahul286


2

在我的情况下(相同的nginx错误消息),一些有问题的php脚本没有结束执行并等待某些东西,导致没有更多的php5-fpm子代供nginx选择。

固定:

  1. 添加执行时间限制其他人在这篇文章中提到它。 request_terminate_timeout=30s
  2. 提高孩子人数。一切都像魅力。 pm.max_spare_servers=16 pm.min_spare_servers=2

现在一切都像魅力一样。


我的php脚本中有长时间运行的外部连接请求。寻找那些长时间运行的任务,并为它们设置超时。
Ali Nadalizadeh '17

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

这也可以帮助人们:

根据您的设置,在我的情况下(我正在使用apache2 + php5-fpm),您应该查看fastcgi配置参数以及php ...,并且max_execution时间还取决于fastcgi模块等待响应的时间( -空闲超时) ...

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


为什么要使用apache2?我的意思是您可以直接使用nginx与php5-fpm进行交互。如果您拥有Nginx,则无需使用Apache!
rahul286

如果您使用的是nginx,如果其他人不希望使用nginx,则可以帮助他们。:-) ...我碰到了这个页面,寻找与Apache2 + php5-fpm相关的问题
farinspace

好。我以为您正在将Nginx与Apache一起用于PHP脚本,就像某些pople过去使用它一样。
rahul286
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.