nginx 504网关超时解决方法

Nginx突然报错504网关超时,在使用php对数据库进行大量查询操作时,偶尔会报错504网关超时。遇到504网关超时也不用怕,只是个别操作会造成504网关超时,重新刷新超时页面,也可以继续进行数据库连接操作,只是比较麻烦,下面看一下如何解决Nginx 504网关超时的问题。

504网关超时

突然报错,在使用php对进行大量查询操作时,偶尔会报错504网关超时。遇到504网关超时也不用怕,只是个别操作会造成504网关超时,重新刷新超时页面,也可以继续进行数据库连接操作,只是比较麻烦,下面看一下如何解决Nginx 504网关超时的问题。

通常会有下面几种情况导致504网关超时:

  1. 网站程序处理大量数据,导致等待时间过长,造成504网关超时。
  2. web程序中调用外部请求时,由于外部请求响应超时,所造成的504网关超时。
  3. 连接SQL数据库失败后,没有及时停止程序,造成死循环后,产生的504网关超时。

504网关超时的问题出在Nginx的配置上。下面登录,打开nginx的配置文件。可以使用或者工具登录服务器,前者是在系统中进行修改,后者是通过SSH的SFTP方式进行文件修改。

修改nginx配置

修改 /etc/nginx/ 文件。

在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网关超时,最后还是要优化网站程序和数据库才是最终的解决方案。

 

评分

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注