Nginx + PHP-FPM 7.1 – 504网关超时

我正在运行一个nginx 1.12和一个php-fpm 7.1作为synology nas上的独立docker容器,如果php-script运行时间超过60s,我会得到一个504网关错误。 我已经尝试了几个nginxconfiguration参数,但错误仍然存​​在。

这是我的实际nginxconfiguration:

#user www-data; #group http worker_processes 1; error_log /opt/data/logs/nginx_error.log notice; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #keepalive_timeout 30s; sendfile on; #tcp_nopush off; tcp_nodelay on; #gzip off; send_timeout 300 server { listen 80; server_name ""; root /opt/php; index index.php; location /data/ { sendfile on; root /opt; } location ~ \.php$ { include fastcgi_params; fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } # Mitigate https://httpoxy.org/ vulnerabilities fastcgi_param HTTP_PROXY ""; fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_read_timeout 300; #fastcgi_buffering off; #fastcgi_keep_conn on; #fastcgi_intercept_errors on; #fastcgi_cache off; #fastcgi_ignore_client_abort on; } location ~ ^/(status|ping)$ { access_log off; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass php:9000; } } } 

php-testscript:

 <?php sleep(65); echo "done!"; file_put_contents("/opt/data/timetest.txt", "\nEnd", FILE_APPEND); 

60秒后,浏览器显示504网关超时。 php脚本仍在运行,并且正在将文本写入文件。

Nginx错误日志:

 2017/07/22 08:16:32 [error] 8#8: *10 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 172.17.0.1, server: , request: "GET /timetest.php HTTP/1.1", upstream: "fastcgi://172.17.0.3:9000", host: "192.168.0.100:8081" 

有没有人有一个想法?

这个问题可能是为什么你的后端花了这么长时间来回应? 不确定你的用例,但通常不方便用户等待响应。

回答你的问题:
我发现这个链接: https : //easyengine.io/tutorials/php/increase-script-execution-time/

join/etc/php5/fpm/php.ini

 max_execution_time = 300 

在/etc/php5/fpm/pool.d/www.conf中设置

 request_terminate_timeout = 300 

在/etc/nginx/nginx.conf中设置

 http { #... fastcgi_read_timeout 300; #... } 

并在您的configuration:

 location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_read_timeout 300; } 

并重新加载服务

 service php5-fpm reload service nginx reload