nginx配置,如何修改超时限制以避免奇怪的404超时现象
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
nginx
本质上是个代理,那么在处理一些长期运行的脚本的时候,会出现一种奇怪的404
现象。究其实质,并不是因为脚本文件针对没有找到,而是因为脚本长时间运行导致没有输出,而造成的一种文件不存在的假象。也可以说,nginx
判断文件是否存在的标准,并不是file_exists()
,而是是否有及时的输出。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验文章。本文测试环境:win10
,php@8.2.11nts
,nginx@1.15.11
。
前文回顾
本文讨论的现象,是一种基于nginx
的奇怪404
现象:
解决方案的基础就是:nginx
代理php
的程序。参考:
修改配置
选项 | 默认值 | 单位 | 说明 |
---|---|---|---|
fastcgi_connect_timeout | 60 | 秒 | 连接FastCGI超时时间 |
fastcgi_read_timeout | 60 | 秒 | 读取FastCGI服务器的响应超时时间 |
fastcgi_send_timeout | 60 | 秒 | 发送FastCGI服务器的响应超时时间 |
虽然说,nginx
并不能阻止超时现象的存在,但是可以尽最大努力延缓这种现象的发生。所以,如果是一个长期运行,且存在输出的php
脚本(set_time_limit(0)
),苏南大叔认为:请不要在外面套nginx
,这会使得问题复杂化。
最终配置
nginx
代理php
,并设置fastcgi
的超时,配置如下:
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9002;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
fastcgi_connect_timeout 600;
fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
}
有关include fastcgi_params
配置,可能会引起php
文件上传问题的文章:
参考文章
- https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_connect_timeout
- https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_read_timeout
- https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_send_timeout
结语
长时间运行的php
脚本(set_time_limit(0)
),并不建议在放在nginx
下执行,并且nginx
并不能完全阻止超时的发生。这就是本文的主要结论。即使按着本文的设置进行配置后,缓解的也是奇怪的404
超时的问题,并不能解决脚本输出无法显式的问题。请知晓。
更多nginx
设置经验文章,请参考:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。