刚才在调试程序的时候,竟然服务器502错误,昨天晚上也发生了,好像我没有作很是规的操做。 而后网上寻找了下答案, 把一些缘由及解决方法汇总一下,以防生产环境下的502 php
会有好多种状况出现502错误,下面咱们分状况来讲一下。nginx
1、fastcgi缓冲区设置太小 出现错误,首先要查找nginx的日志文件,目录为/var/log/nginx,在日志中发现了以下错误。后端
2013/01/17 13:33:47 [error] 15421#0: *16 upstream sent too big header while reading response header from upstream服务器
查阅了一下资料,大意是nginx缓冲区有一个bug形成的,咱们网站的页面消耗占用缓冲区可能过大。php-fpm
网上查找了一下解决方法,在国外网站看到了一个增长缓冲区的方法,完全解决了Nginx 502 Bad Gateway的问题。方法以下: http { ... fastcgi_buffers 8 16k; fastcgi_buffer_size 32k; ... }网站
请根据服务器已经网站的状况自行增大上述两个配置项。spa
2、代理缓冲区设置太小 若是你使用的是nginx反向代理,若是header过大,超出了默认的1k,就会引起上述的upstream sent too big header (说白了就是nginx把外部请求给后端处理,后端返回的header太大,nginx处理不过来就会致使502。代理
server { listen 80; server_name *.lxy.me;调试
location / {
###############添加这3行 <span class='wp_keywordlink_affiliate'><a href="http://lxy.me/tag/proxy" title="查看 proxy 中的所有文章" target="_blank">proxy</a></span>_buffer_size 64k; <span class='wp_keywordlink_affiliate'><a href="http://lxy.me/tag/proxy" title="查看 proxy 中的所有文章" target="_blank">proxy</a></span>_buffers 32 32k; <span class='wp_keywordlink_affiliate'><a href="http://lxy.me/tag/proxy" title="查看 proxy 中的所有文章" target="_blank">proxy</a></span>_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; ............ }日志
3、默认php-cgi的进程数设置过少 在安装好使用过程当中出现502问题,通常是由于默认php-cgi进程是5个,可能由于phpcgi进程不够用而形成502,须要修改/usr/local/php/etc/php-fpm.conf 将其中的max_children值适当增长。也有多是max_requests值不够用。须要说明的是这连个配置项占用内存很大,请根据服务器配置进行设置。不然可能起到反效果。
4、php执行超时 php执行超时,修改/usr/local/php/etc/php.ini 将max_execution_time 改成300
5、nginx等待时间超时 部分PHP程序的执行时间超过了Nginx的等待时间,能够适当增长nginx.conf配置文件中FastCGI的timeout时间
http { fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; ...... }