本文主要介绍Nginx 502坏网关错误的原因和解决方法,并通过实例代码进行了详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。
NGX502坏网关的错误已经遇到好几次了。这里有记录,备忘录哈哈。
出现502错误的情况有很多种。我们分不同的情况来说一下。
一、fastcgi缓冲区设置过小
如果出现错误,首先查找nginx的日志文件,目录为/var/log/nginx,在日志中发现如下错误。
2013/01/17 13:33:47[错误] 15421#0: *16从上游读取响应标头时,上游发送了太大的标头
查阅资料后,大意是nginx缓冲区出现了bug,我们网站的页面消耗可能占用了过多的缓冲区。
我在网上查了解决方案,在国外网站看到一个增加缓冲的方法,彻底解决了Nginx 502坏网关的问题。该方法如下:
http {
.
fastcgi _ buffers 8 16k
fastcgi _ buffer _ size 32k
.
}
请根据服务器网站增加以上两项配置。
二、代理缓冲区设置过小
如果是使用nginx反向代理,如果头太大,超过默认的1k,就会触发上面提到的上游发送的太大的头(说白了,nginx把外部请求发送到后端处理,后端返回的头太大,所以nginx处理不了,就会造成502。
服务器{
听80;
server _ name * . lxy . me;
位置/{
# # # # # # # # #把这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进程是5,可能会因为phpcgi进程不够而导致502。您需要修改/usr/local/PHP/etc/PHP-fpm . conf来适当增加max_children值。也有可能是max_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
.
}
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。