我在synology nas上将nginx 1.12和php-fpm 7.1作为单独的docker容器运行,并且如果php- script运行时间超过60s,则会收到504 Gateway错误。我已经尝试了几个nginx配置参数,但是错误仍然存在。
这是我实际的nginx配置:
#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/
添加在/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; #... } 并在您的配置中: 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
添加在/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; #... }
并在您的配置中:
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