A 504 error means nginx has waited too long for a response and has timed out. There might be multiple reasons for the problem. Possible fixes include: Increasing the nginx proxy_read_timeout default of five minutes to be longer, for example, to 10 minutes.
For example, you want to increase request timeout to 300 seconds. Then you need to add proxy_read_timeout, proxy_connect_timeout, proxy_send_timeout directives to http or server block. Here the http block allows the changes in all server in NGINX.
There are several ways in which you can set the timeout for php-fpm. In /etc/php5/fpm/pool.d/www.conf
I added this line:
request_terminate_timeout = 180
Also, in /etc/nginx/sites-available/default
I added the following line to the location block of the server in question:
fastcgi_read_timeout 180;
The entire location block looks like this:
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 180;
include fastcgi_params;
}
Now just restart php-fpm and nginx and there should be no more timeouts for requests taking less than 180 seconds.
Try this link, it has a better solution on how to fix this. So the steps are:
nginx.conf
file located in /etc/nginx
directory.Add this below piece of code under http {
section:
client_header_timeout 3000;
client_body_timeout 3000;
fastcgi_read_timeout 3000;
client_max_body_size 32m;
fastcgi_buffers 8 128k;
fastcgi_buffer_size 128k;
Note: If its already present , change the values according.
Reload Nginx and php5-fpm.
$ service nginx reload
$ service php5-fpm reload
If the error persists, consider increasing the values.
You can't use PHP to prevent a timeout issued by nginx.
To configure nginx to allow more time see the proxy_read_timeout
directive.
sudo nano /etc/nginx/nginx.conf
Add these variables to nginx.conf file:
http {
# .....
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
And then restart:
service nginx reload
The correct answer is increasing fastcgi_read_timeout in your Nginx configuration.
Simple as that!
There are three kinds of timeouts which can occur in such a case. It can be seen that each answer is focused on only one aspect of these possibilities. So, I thought to write it down so someone visiting here in future does not need to randomly check each answer and get success without knowing which worked.
So the fixes for each issue are as follows.
set timeout header eg: in ajax
$.ajax({
url: "test.html",
error: function(){
// will fire when timeout is reached
},
success: function(){
//do something
},
timeout: 3000 // sets timeout to 3 seconds
});
nginx Client timeout
http{
#in seconds
fastcgi_read_timeout 600;
client_header_timeout 600;
client_body_timeout 600;
}
nginx proxied server timeout
http{
#Time to wait for the replying server
proxy_read_timeout 600s;
}
So use the one that you need. Maybe in some cases, you need all these configurations. I needed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With