很多情况下会出现502错误。让我们逐案讨论。
一、fastcgi缓冲区设置太小
如果出现错误,首先在/var/log/nginx目录下查找nginx的日志文件。在日志中发现以下错误。
2013/01/17 13:33:47 [错误] 15421#0: *16 上游从上游读取响应标头时发送的标头太大
查看信息,大意是nginx缓冲区有bug。我们网站的页面消耗可能会占用过多的缓冲区。
在网上找到了解决办法,在国外网站上看到了增加缓冲区的方法,彻底解决了nginx 502 bad gateway的问题。方法如下:
http {
...
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
...
}
请根据服务器有网站的情况增加以上两个配置项。
二、代理缓冲区设置太小
如果使用nginx反向代理,如果header过大超过默认的1K,就会触发上面提到的upstream send too big header(说白了就是nginx会将外部请求发送到后端处理。如果后端返回的header过大,nginx会处理失败,导致502。
服务器{
听80;
server_name *.lxy.me;
location / {
###############添加这3行
proxy_buffer_size 64k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 128k;
###############这3行
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
......
}
三、默认PHP CGI设置的进程太少
在安装和使用过程中出现502问题。通常,默认有五个 PHP CGI 进程。可能是phpcgi进程不足造成的。需要修改/usr/local/PHP/etc/PHP FPM Conf设置Max_children值适当增加。它也可能是 max_Insufficient requests 值。需要注意的是,这些配置项会占用大量内存。请根据服务器配置进行设置。否则,可能会适得其反。
四、PHP执行超时
PHP执行超时,修改/usr/local/PHP/etc/PHP Ini Max_execution_Time改为300
五、Nginx等待时间超时
部分PHP程序的执行时间超过了nginx的等待时间,可以在nginx的conf配置文件中适当添加fastcgi的超时时间
http {
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
.....
}
以上就是本文的全部内容。希望对你的学习有所帮助。
Copyright © 2013-2021 8a.hk All Rights Reserved. 八艾云 版权所有 中山市八艾云计算有限公司 粤ICP备14095776号