如何解决nginx 504 Gateway Time-out错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决nginx 504 Gateway Time-out错误相关的知识,希望对你有一定的参考价值。

参考技术A 主要访问大流量网站或者运营有较多数据的网站时候504GatewayTime-out就字面意思,我们可以理解为网页请求超时,也就是浏览网站网页所发出的请求没有反应或者未响应,在网站程序层面来说,就是请求未能够执行相应的php-CGI程序,或者PHP-CGI程序未能做出相应的处理,又或者是CGI程序的响应处理结果未能够反馈到浏览器或者未能及时反馈到浏览器。504GatewayTime-out错误多是存在于nginx网站服务器环境下,多与nginx.conf与php-fpm.conf设置是否正确合理有关。504GatewayTime-out错误的解决方法就是根据网站服务器性能及网站流量等诸多因素整合考虑,正确合理的设置niginx.conf和php-fpm.conf配置。进行正确合理nginx.conf配置,我们需要先了解和清楚我们网站服务器的配置性能,包括CPU、内存等,并对网站服务器进行必要的性能测试(可参考:vps主机性能测试方法详解),从而准确的掌握网站服务器自身性能状况;其次,是通过网站统计代码的添加,分析段时间内网站流量状况,比如:百度统计、CNZZ站长统计等,掌握网站日流量及PHP-CGI请求的大概情况;后,根据我们掌握的服务器性能状况及网络流量情况,合理的对nginx.conf中的下列字句进行合理正确的设置。fastcgi_connect_timeout300s;fastcgi_send_timeout300s;fastcgi_read_timeout300s;fastcgi_buffer_size128k;fastcgi_buffers8128k;#8128fastcgi_busy_buffers_size256k;fastcgi_temp_file_write_size256k;fastcgi_intercept_errorson;这些字句的设置规定了PHP-CGI的连接、发送和读取时间限制,需根据服务器性能及网络流量综合考虑设置,时间设置过长会给网站服务器造成压力,导致网站响应缓慢,甚至服务器宕机;时间设置过短,则就会出现504GatewayTime-out或者其他CGI无响应错误。还有就是php-fpm.conf中max_children与request_terminate_timeout两个重要参数的设置。这两个参数的设置需要我们根据PHP程序情况及服务器带宽状况综合考虑并计算出合理准确的值,才能够避免504GatewayTime-out或者其他CGI无响应错误的出现。通常情况下,般网站,可将request_terminate_timeou设置在900s左右,而max_children值根据服务器内存大小和CGI请求数目设置为合理的数值,般设置为800M左右。谢谢采纳

如何解决 Nginx “proxy_pass 502 Bad Gateway”错误

【中文标题】如何解决 Nginx “proxy_pass 502 Bad Gateway”错误【英文标题】:How to resolve Nginx "proxy_pass 502 Bad Gateway" error 【发布时间】:2017-01-04 03:12:09 【问题描述】:

我试图在我的 nginx.conf 文件中添加 proxy_set_header。当我尝试添加 proxy_pass 并调用 URL 时,它会抛出 502 Bad Gateway nginx/1.11.1 错误。

不确定如何解决此错误:

upstream app-server 
    # connect to this socket
    server unix:///tmp/alpasso-wsgi.sock;    # for a file socket


server 
    server_name <name>;

    listen 80 default_server;

    # Redirect http to https
    rewrite ^(.*) https://$host$1 permanent;


server 
    server_name <name>;

    listen 443 ssl default_server;

    recursive_error_pages on;

    location /azure
        proxy_pass http://app-server;
    

    ssl on;
    ssl_certificate      /etc/nginx/server.crt;
    ssl_certificate_key  /etc/nginx/server.key;
    ssl_client_certificate /etc/nginx/server.crt;
    ssl_verify_client optional;

【问题讨论】:

nginx 错误日志是怎么说的? 为此,错误日志文件中没有显示错误消息。 【参考方案1】:

proxy_pass 也有类似问题,如果你的 Linux 服务器使用 SELINUX,那么你可能想试试这个。

$ setsebool -P httpd_can_network_connect true

参考沃伦的回答:https://unix.stackexchange.com/questions/196907/proxy-nginx-shows-a-bad-gateway-error

【讨论】:

【参考方案2】:

502 在您的上游无法访问时发送。

尝试打开error log,你可能会看到failed to connect to upstream, 为此,您需要检查您的upstream 服务器是否正在运行,sudo service upstream status,并尝试将其打开。

【讨论】:

【参考方案3】:

Nginx 代理与 unix 套接字故障排除:

    检查 nginx 配置:
nginx -t
    检查套接字:
netstat --protocol=unix -nlp | grep alpasso-wsgi.socket
    检查应用是否正常工作:
curl --unix-socket /tmp/alpasso-wsgi.sock http:/your-path-on-app

(必须是屏幕输出的html代码)

    如果没有,请检查您的应用。如果是:

    查看 nginx 错误日志

sudo tail -f /var/log/nginx/error.log
    如果出现 nginx 权限错误,请检查套接字的 nginx 用户权限:

确定 nginx 使用哪个用户名:

ps aux | grep nginx

例如,如果 nginx 用户是 www-data,则授予 www-data 用户所需的权限。将 www-data 用户添加到所需的组:

sudo usermod -a -G your-socket-file-group www-data 

并检查套接字文件的权限, 或使用 ACL:

sudo setfacl -R -m u:www-data:rwX /path-to-your-unix-socket
sudo setfacl -Rd -m u:www-data:rwX /path-to-your-unix-socket
    我认为,ACL 的安全性更好。因为您只授予 nginx 一个文件的权限,而不是属于组的所有文件。

【讨论】:

以上是关于如何解决nginx 504 Gateway Time-out错误的主要内容,如果未能解决你的问题,请参考以下文章

如何解决“504 Gateway Time-out”错误

如何解决nginx 504 Gateway Time-out错误

nginx出现504 Gateway Time-out的解决思路

如何解决“504 Gateway Time-out”错误

如何解决504 Gateway Time-out错误

解决504 Gateway Time-out(nginx)