504 Timeout when running PHP script

I have a PHP script that processes a folder of images, it takes quite a
while to do this, but should produce output as it goes along. But when
running this script I get a 504 Timeout, probably after 60s. The script
also appears to stop running, so I end up with some database records
written, and others not. (Does nginx send a signal to the fastcgi
process to tell it to stop what it’s doing and get on with the next
request?)

I checked the Nginx logs for the site, and weirdly there wasn’t anything
in there about the timeout (I’m using the default error log level).

I’m running PHP as fastcgi, the relevant section of the Nginx config is:

location /admin/ {
auth_basic “Restricted”;
auth_basic_user_file
/home/djeyewater/SSI/davidkennardphotography/.htpasswd;

#rewrite any .xhtml page to page.php
rewrite ^/(.+)\.xhtml$ /$1.php;

}

location /admin/batch-upload.php {
auth_basic “Restricted”;
auth_basic_user_file
/home/djeyewater/SSI/davidkennardphotography/.htpasswd;
add_header Cache-Control “private, must-revalidate”;
fastcgi_read_timeout 1200;
fastcgi_pass
unix:/home/djeyewater/webapps/php/php.sock;
}

location ~ ^/admin/.*.php {
auth_basic “Restricted”;
auth_basic_user_file
/home/djeyewater/SSI/davidkennardphotography/.htpasswd;
add_header Cache-Control “private, must-revalidate”;
fastcgi_read_timeout 120;
fastcgi_pass
unix:/home/djeyewater/webapps/php/php.sock;
}

And I’m accessing the page as /batch-upload.xhtml

Thanks

Dave

Posted at Nginx Forum:

Hi,

I have a PHP script that processes a folder of images,
it takes quite a while to do this, but should produce
output as it goes along. But when running this script I
get a 504 Timeout, probably after 60s. The script also
appears to stop running, so I end up with some database
records written, and others not. (Does nginx send a
signal to the fastcgi process to tell it to stop what
it’s doing and get on with the next request?)

I see you already set fastcgi_read_timeout to a high value on your
server,
so the problem may lie on the PHP side.

Check your max_execution_time (have a look at the memory limits aswell)
in
php.ini to make sure PHP itself does not trigger a timeout. You should
also
make sure that your script does not use output buffering (and also
disable
output buffering in php.ini), and it flushes its output immediately
(check
out the implicit_flush directive on php.ini).

greetings,
alex

Alexander Vogt Wrote:

greetings,
alex

Thanks for the advice, I did what you suggested and the page now works
okay.

Regards

Dave

Posted at Nginx Forum: