LNMP Nginx 502 Bad Gateway錯誤解決方法
 
方法1:
在php.ini裡,eaccelerator配置項一定要放在Zend ptimizer配置之前,否則也可能引起502 Bad Gateway。php一些模塊之間也可能會造成502,如Zend GuardLoader與Opcache,ioncube與Zend GuardLoader等,一般可以通過註釋掉一個然後重啟php-fpm,然後看502 error是否排除。
 
方法2:
在安裝好使用過程中出現502問題,一般是因為默認php-cgi進程是5個,可能因為phpcgi進程不夠用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 將其中的max_children值適當增加,如果php已升級到5.3.*以上且使用的是dynamic模式,需要調整pm.min_spare_servers和pm.max_spare_servers的值適當增加。最大值可以按內存xxMB/2/20 的整數來算(內存以MB為單位進行計算,/ 為除,取整數),最小值可以按內存/2/40 的整數來算,可以少點或多大,可以自己調整運行看看,同時pm.max_children也調整為和pm.max_spare_servers的值一樣。
也有可能是max_requests值不夠用。
 
方法3:
php執行超時,修改/usr/local/php/etc/php.ini 將max_execution_time 改為300 或直接改成0 不限制,同時還需要修改/usr/local/php/etc/php-fpm.conf 調整request_terminate_timeout的值
再/etc/init.d/php-fpm restart重啟使其生效。
 
方法4:
如mysql日誌佔用大量空間清理一下磁盤上的文件
虛擬主機的日誌文件過大也可能會造成502問題 /home/wwwlog/access.log
 
方法5:
將nginx.conf裡的
fastcgi_connect_timeout
fastcgi_send_timeout
fastcgi_read_timeout都調大一點
 
方法6:
可能是php打開文件數的限制
打開php-fpm.conf 找到 rlimit_files 改成:65535
編輯 /etc/security/limits.conf 加上:
* soft nofile 65535
* hard nofile 65535
編輯/etc/sysctl.conf 底部添加fs.file-max=65535

echo “ulimit -SHn 65535″ >> /etc/rc.local
重啟系統
 
方法7:
有時候unix套接字模式下可能會502,可以嘗試改成tcp/ip的方式 php 5.2下/tmp/php-cgi.sock替換為127.0.0.1:9000 php 5.3及以上版本listen = /tmp/php-cgi.sock替換為listen = 127.0.0.1:9000,nginx配置文件及虛擬主機配置文件裡fastcgi_pass unix:/tmp/php-cgi.sock;替換為fastcgi_pass 127.0.0.1:9000; 之後重啟試試。
 
2010/05/21 11:26:16 [crit] 9156#0: *42 connect() to unix:/tmp/php-cgi.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.0.33, server: localhost, request: “GET / HTTP/1.1″, upstream: “fastcgi://unix:/tmp/php-cgi.sock:", host: “192.168.0.214:8080″Reply
 
重點php-fpm要和nginx設定裡面fastcgi配置要一樣.
假設原本/usr/local/php/etc/php-fpm.conf文件中的fastcgi設定是/tmp/php-cgi.sock 或 unix:/var/run/php-fpm/php-fpm.sock;
而且/usr/local/nginx/conf/enable-php.conf文件中的fastcgi設定也是/tmp/php-cgi.sock 或 unix:/var/run/php-fpm/php-fpm.sock;
那麼把 /tmp/php-cgi.sock 換成127.0.0.1:9000 然後重起 nginx 與php-fpm即可
以下是 修改 /usr/local/php/etc/php-fpm.conf
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
修改 /usr/local/nginx/conf/enable-php.conf
 
location ~ [^/]\.php(/|$)
{
try_files $uri =404;
# fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
反之,如果php-fpm要和nginx設定裡面fastcgi配置都是127.0.0.1:9000;
那麼就可以把他們修改成 unix:/tmp/php-cgi.sock 試試