精品软件与实用教程
504网关超时
Nginx突然报错504网关超时,在使用php对数据库进行大量查询操作时,偶尔会报错504网关超时。遇到504网关超时也不用怕,只是个别操作会造成504网关超时,重新刷新超时页面,也可以继续进行数据库连接操作,只是比较麻烦,下面看一下如何解决Nginx 504网关超时的问题。
通常会有下面几种情况导致504网关超时:
- 网站程序处理大量数据,导致等待时间过长,造成504网关超时。
- web程序中调用外部请求时,由于外部请求响应超时,所造成的504网关超时。
- 连接SQL数据库失败后,没有及时停止程序,造成死循环后,产生的504网关超时。
504网关超时的问题出在Nginx的配置上。下面登录服务器,打开nginx的配置文件。可以使用xshell或者Xftp工具登录服务器,前者是在Linux系统中进行修改,后者是通过SSH的SFTP方式进行文件修改。
修改nginx配置
修改 /etc/nginx/nginx.conf 文件。
在http {}的块中添加参数:
fastcgi_connect_timeout 6000;
fastcgi_send_timeout 6000;
fastcgi_read_timeout 6000;
下面看一下这几个参数都有什么作用。
fastcgi_connect_timeout
fastcgi连接超时时间,默认60秒
fastcgi_send_timeout
nginx 进程向 fastcgi 进程发送请求过程的超时时间,默认值60秒
fastcgi_read_timeout
fastcgi 进程向 nginx 进程发送输出过程的超时时间,默认值60秒
另外,在nginx中,还有针对代理超时的参数设置。
proxy_connect_timeout 20000;
proxy_send_timeout 20000;
proxy_read_timeout 20000;
proxy_connect_timeout
nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout
后端服务器数据回传时间(代理发送超时)
proxy_read_timeout
连接成功后,后端服务器响应时间(代理接收超时)
关于代理超时参数配置这部分,如果你的Nginx没有对外提供代理服务,可以忽略此处配置。
Nginx修改完毕后,使用nginx -t 查看以下配置文件是否正确,然后重新启动nginx服务。
systemctl restart nginx
修改PHP配置
1.修改 /etc/php.ini 文件,在php.ini文件中查找 max_execution_time ,单位秒。
max_execution_time
max_execution_time 是php脚本最大执行时间,默认时间30秒,建议修改值300秒。
2.在 /etc/php-fpm.d 中,修改 http://www.conf 文件。查找 request_terminate_timeout,单位秒。
request_terminate_timeout
设置单个请求的超时时间,建议设置6000
3.可以在PHP程序中可加入 set_time_limit(seconds) 设置最长执行时间
例如:set_time_limit(0) 表示不超时。
在php中修改完参数后,重新启动php服务。
systemctl restart php-fpm
总结
以上就是修改nginx 504网关超时的办法,一般在数据量比较大的环境中会照成网关超时。通过上面的解决办法,通过延长超时时间的办法,暂时解决了504网关超时,最后还是要优化网站程序和数据库才是最终的解决方案。