nginx映射到项目报错502错误的解决过程

  1. 配置nginx映射到项目代码,能够访问项目代码public下的index.html,但是不能访问index.php:

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

开始按照网上说的方式挨个调试:

1.查看nginx进程:ps –aux | grep nginx  

杀死多余的占用nginx的进程:kill -9 pid

并没有用,再试其它方法

2.查看php-fpm是否在运行:

service php7.1-fpm status  

是active的

3.查看9000端口运行情况:

netstat -ant | grep 9000

发现没有启动,则9000端口没被nginx中映射使用到,说明这里出错了fastcgi_pass unix:129.0.0.1:9000

这里是由php-fpm配置决定使用的,则查看php-fpm配置

4.cat /etc/php/7.1/fpm//php-fpm.conf 

发现是引入: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

5.找到问题,修改test2.conf:   

vim /etc/nginx/conf.d/test2.conf

fastcgi_pass 127.0.0.1改为fastcgi_pass unix:/run/php/php7.1-fpm.sock;

6.平滑重载nginx

service nginx reload

7.重启php-fpm

service php7.1-fpm restart

解决问题!

说明以上只是本人遇到的502错误的解决方法,502错还可能还会是其他原因造成的,主要入手点在于检查nginx,php-fpm配置;

另外502的错误还可能如下(可能还有其他情况,先列出三种):

1.查看当前php FastCGI进程数比预设的小:

netstat -anpo | grep "php-cgi" | wc –l

若实际使用的Fascgi进程数 接近或小于 预设的 Fascgi进程数,那么则需要增大,注意这个参数为在php-fpm.conf中的参数:max_children的大小;

2.php单个请求超时时间设置过小:

 php-fpm.conf中.request_terminate_timeout设置过小,在单个请求的php程序未执行完的情况下nginx就与php-fpm断掉,导致发送502 bad getway错误;

将其设置为0的话表示:永不超时;

3.php程序执行时间超过Nginx等待时间:

将nginx.conf中的Fastcgi对应的fastcgi_connect_timeout,fastcgi_sebd_timeout, fastcgi_read_timeout三个参数适当增大;

 

另外其他http状态码的排查:

(1).正常的常见http code:

200:成功;

301:永久重定向, 表示客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL;

302:临时重定向;

304:(重点) 服务器告诉客户,原来缓存的文档还可以继续使用;

(2).不正常的常见http code:

400:请求错误,网站服务未启动;

404:请求文件不存在;

499: (重点) nginx将同一IP过多的请求中断掉,导致部分请求失败;

 

 

你可能感兴趣的:(nginx)