Nginx + php-fpm "504 Gateway Time-out" error with almost zero load (on a test-server)
Solution 1
I found answer on my posting on the nginx forum - http://forum.nginx.org/read.php?2,127854
The answer, in my case, is to set:
request_terminate_timeout=30s
in php-fpm config (usually /etc/php5/fpm/php-fpm.conf
)
Note, you can use values other than 30s also.
I used it to match my value in main php.ini
file which is:
max_execution_time = 30
Thanks All. :-)
Solution 2
Here how it resolved my issue:
make following changes to /etc/nginx/nginx.conf in http { section
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
and then restart nginx
/etc/init.d/nginx restart
Solution 3
If you are using php 5.3, increase the backlog.
If you are using php 5.2, backport the patch to increase the backlog size from 128.
Also, use a unix socket rather than a TCP socket. unix:/tmp/php5-cgi.sock (or the relevant path)
Solution 4
Great, thanks
request_terminate_timeout=30s
It works perfectly for me
but, I had to insert the line in this file : "/etc/php5/fpm/pool.d/www.conf" that is to say in the "Worker Section".
PHP 5.3.21-1 - Wordpress 3.5.1
http://php-fpm.org/wiki/Configuration_File
Solution 5
in my case (same nginx error message), some problematic php scripts are not ending to execute and waiting for something, resulting no more php5-fpm children for nginx to pick.
fix:
- add execution time limit other mentioned it this post.
request_terminate_timeout=30s
- raise children number. and everything worked like a charm.
pm.max_spare_servers=16
pm.min_spare_servers=2
now everything worked like a charm.
rahul286
A geek (wordpress & nginx), blogger (tech) & entrepreneur (rtCamp) Currently leading EasyEngine Project - a CLI tool to manage WordPress-Nginx sites & more!
Updated on September 17, 2022Comments
-
rahul286 almost 2 years
After debugging for 6-hours - I am giving this up :|
We have a nginx+php-fpm+mysql in LAN with almost 100 wordpress (created and used by different designers/developers all working on test wordpres setup)
We are using nginx without any issues from long.
Today, all of a sudden - nginx started returning "504 Gateway Time-out" out of the blue...
I checked nginx error log for a virtual host...
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"
As I run php-fpm on port 9000 via TCP mode, I ran "netstat | grep 9000" and noticed something unusual... (Pasting partial output here for ease of read)
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
There are plenty of "CLOSE_WAIT" & "FIN_WAIT2" pairs as highlighted below (in above output):
tcp 1337 0 localhost:9000 localhost:46680 CLOSE_WAIT - tcp 0 0 localhost:46680 localhost:9000 FIN_WAIT2 -
Please note port 46680 in above.
I enabled mysql slow queries error log, but it didn't work.
As of now restarting php5-fpm every minute via a cronjob (see command below) keeping everything running "smoothly" but I hate patchwork and want to solve this...
1 * * * * service php5-fpm restart > /dev/null
I searched extensively on Google - got no help. As mentioned, this a test-server in LAN, CPU load is never crossed 0.10 and memory usage is also below 25% (System has 2GB RAM and ubuntu-server installed) So if you find its time-confusing to help me out, please atleast drop a hint.
Thanks in advance for help.
-Rahul
(note - this is reposting of - http://forum.nginx.org/read.php?11,127694)
Update: I found answer, which is posted below.
-
Matt almost 14 yearsI'd have to agree, especially with the unix socket usage.
-
rahul286 almost 14 yearsThanks karmawhore for answer. I found a solution on nginx mailing list.
-
rahul286 over 13 yearswhy use apache2?? I mean u can use nginx directly to interact with php5-fpm. No need to use Apache when u have nginx!
-
Daniela over 13 yearsIf your using nginx, if others are NOT using nginx hopefully this will help them out. :-) ... I came across this page searching for Apache2 + php5-fpm related question
-
rahul286 over 13 yearsok. I thought you are using Nginx with Apache for PHP scripts like some pople used it in past.
-
breiti over 12 years@rahul286 which answere? iam interested!
-
rahul286 over 12 years@breiti see my anser below - serverfault.com/a/179136/17440
-
rahul286 about 12 yearsWe did not have apache on our server then. Glad to know your case as it may help us in future.
-
HopelessN00b over 11 yearsYeah, that really doesn't look like it has anything to do with the problem the person asking the question has.
-
luchaninov about 11 yearsbut luckily that's what I needed :)
-
Dev Ghai almost 11 yearsThis config may also be found in www.conf file. Thanks for the answer though, this seems to have done the trick.
-
Philip over 9 yearsIf this is the correct answer which I REALLY NEEED then this Friday will be the best of 2015 yet.
-
Jorge Vicente Mendoza over 8 yearsI had a combination of factors that end up causing the 502 error your recipe did the magic trick! thanks you so much!
-
samin about 8 yearsI found that putting
request_terminate_timeout=30s
into myphp-fpm.conf
file caused a (111 Connection Refused) error. When I moved it to mywww.conf
file it worked. -
nadavkav over 7 yearsOn CentOS 7.2 when using php7, request_terminate_timeout is located in: /etc/php-fpm.d/www.conf
-
Ali Nadalizadeh over 6 yearsI had a long running external connection request in my php script. Look for those long running tasks and put a timeout for them.
-
Michael almost 6 yearsThis didn't fix my issue, but it allowed me to see the actual error instead of the timeout message, which led me to the actual issue.