查了一下 Nginx 502 Bad Gateway 的含义是请求的 PHP-CGI 已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致 PHP-CGI 进程终止。
FastCGI 配置正确
php-fpm.conf 如下
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
request_terminate_timeout = 900
request_slowlog_timeout = 0
slowlog = var/log/slow.log
php-fpm.log 里面无报错
请问可能是哪方面的原因 (lnmp 环境
1
strayberry OP server {
listen 80; server_name; set $root_path ' '; root $root_path; index index.php index.html index.htm; try_files $uri $uri/ @rewrite; location @rewrite { rewrite ^/(.*)$ /index.php?_url=/$1; } location ~ \.php { fastcgi_pass 127.0.0.1:9000; fastcgi_index /index.php; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~* ^/(css|img|js|flv|swf|download)/(.+)$ { root $root_path; } location ~ /\.ht { deny all; } } |
2
strayberry OP 上面为 nginx.conf 的 server 配置
|
3
smallpath 2016-05-25 20:51:56 +08:00
502 的原因多了去了, 我遇到最悲惨的一次,是本地 npm install 一个包时没有加--save 参数, 部署时候 require 失败导致 502,足足花了十个小时才排错排出来
|
4
haolisand 2016-05-25 20:59:14 +08:00
看看是不访问太多 php-fpm 进程不够用了
|
5
moro 2016-05-25 21:09:12 +08:00
502 是服务端错误,你看 php-fpm 日志就可以了。
|
6
Balthild 2016-05-25 23:03:58 +08:00 via Android
打开 php.ini 中 ERROR_REPORTING
|
7
windfarer 2016-05-25 23:09:28 +08:00
nginx 部分配置的问题挺多的,
先把 fastcgi_pass 那句改成 fastcgi_pass unix:/tmp/php-cgi.sock 试一下 参考下这个 https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04 |
8
DesignerSkyline 2016-05-25 23:12:55 +08:00
后端出错,检查后端配置是否正常, nginx 可以暂时先不管,因为只要 fastcgi_pass 对应 php 配置一致即可,可以用 127.0.0.1 也可以用 sock
|
10
zcrdhm 2016-05-26 08:45:58 +08:00
一看楼上都是没有经验的。
我来告诉楼主。 我猜楼主的配置肯定是 centos6 系列或者是 redhat6 系列,用了 lnmp 结构,但是 PHP 选择了 5.2 系列。 这个问题是 php 版本造成的。直接将 php 升级到 5.4 以上,就完美解决了。 这个问题似乎就是操作系统和 nginx 与 php 版本兼容导致的。只发现在 centos 和 redhat 上出现问题, ubuntu 及其他,暂未发现。 |
11
strayberry OP 已解决
原因是 自己修改过下面 2 处的配置,导致 nginx 配置文件里的设置和 php-fpm 上的设置不一样也会 502 。如果使用 unix 套接字,修改 /usr/local/php/etc/php-fpm.cnf 里设置, php 5.2 为 /tmp/php-cgi.sock php 5.3 及以上版本为 listen = /tmp/php-cgi.sock ,同时 /usr/local/nginx/conf/nginx.conf 及其 /usr/local/nginx/conf/vhost/ 下面的虚拟主机配置里的 fastcgi_pass unix:/tmp/php-cgi.sock; 不一致就必定 502 。 有时候 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; 之后重启试试。 参考 https://lnmp.org/faq/lnmp-Nginx-502-Bad-Gateway.html |
12
benteke 2016-05-26 15:38:07 +08:00
这么巧,我昨天在 LNMP 下装 phphub 时也碰到类似问题,看 nginx log ,说的是 php-fpm.sock no such file ,最终是在 V2EX 上搜帖子的时候发现一个妹子说可通过命令重新生成这个文件,还真解决了 502 问题。
TCP/IP sockets 和 UNIX socket 那个好呢 |