cat /etc/nginx/nginx.conf 发现其中含一句:include /etc/nginx/conf.d/*.conf;
切换到目录 cd /etc/nginx/conf.d/
新建: vim test2.conf
其中加入:
server {
listen 80;
server_name www.test2.com test2.com;
index index.html index.htm index.php;
server {
listen 80;
server_name www.test2.com test2.com;
index index.html index.htm index.php;
root /home/vagrant/test2/www/public;
set $root_path '/home/vagrant/test2/www/public';
root $root_path;
#支持如laravel框架中的www.test2.com/test/index格式的请求连接
location / {
try_files $uri $uri/ /index.php?$query_string;
}
#以下代码可以设置nginx支持PHP解析
location ~ \.php$ {
root /home/vagrant/test2/www/public;
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
root $root_path;
}
}
}
其中比较坑人的是,开始配置为:
fastcgi_pass unix:129.0.0.1:9000
杀死多余的占用nginx的进程:kill -9 pid
并没有用,再试其它方法
service php7.1-fpm status
是active的
netstat -ant | grep 9000
发现没有启动,则9000端口没被nginx中映射使用到,说明这里出错了fastcgi_pass unix:129.0.0.1:9000
这里是由php-fpm配置决定使用的,则查看php-fpm配置
发现是引入:include=/etc/php/7.1/fpm/pool.d/*.conf
则查看/etc/php/7.1/fpm/pool.d/下的www.conf
发现其中监听的方式为:
listen = /run/php/php7.1-fpm.sock
vim /etc/nginx/conf.d/test2.conf
fastcgi_pass 127.0.0.1改为fastcgi_pass unix:/run/php/php7.1-fpm.sock;
service nginx reload
service php7.1-fpm restart
解决问题!
说明以上只是本人遇到的502错误的解决方法,502错还可能还会是其他原因造成的,主要入手点在于检查nginx,php-fpm配置;
netstat -anpo | grep "php-cgi" | wc –l
若实际使用的Fascgi进程数 接近或小于 预设的 Fascgi进程数,那么则需要增大,注意这个参数为在php-fpm.conf中的参数:max_children的大小;
php-fpm.conf中.request_terminate_timeout设置过小,在单个请求的php程序未执行完的情况下nginx就与php-fpm断掉,导致发送502 bad getway错误;
将其设置为0的话表示:永不超时;
将nginx.conf中的Fastcgi对应的fastcgi_connect_timeout,fastcgi_sebd_timeout, fastcgi_read_timeout三个参数适当增大;