nginx配置报错502

此种情况只适用于nginx+php

背景介绍:环境是centos8  

使用命令 systemctl status nginx  和 systemctl status php-fpm  查看到两种服务都是运行状态以,后又排查防火墙也并没有关闭,在排查文件权限也没有问题

查看了nginx.log文件 看到报错是 (111)上游连接错误 ,这种其实就是nginx和php没打通的一种暗示了。

然后我们排查两者的配置文件就发现了问题

nginx.conf文件中的 fascgi_pass

nginx.conf  中的
fascgi_pass = 127.0.0.1:9000

而php-fpm 中的配置文件是

listen=/run/php-fpm/www.sock

nginx中的fascgi_pass的作用是什么

 nginx并不能直接处理php,他只是一个单纯的服务器,并不能处理php文件;所有当他接受到php请求时,他需要将请求发给php解释器处理,然后拿取到处理后的结果在反馈给我们的客户端;

而上述棕色字体的操作,则通过CGI进行联系

CGI全程“公共网络接口”(Common Gateway Interface),是HTTP服务器于自身服务器或其他服务器上某些程序进行‘交谈’的工具

fascgi_pass的连接方式:

  方法1:通过TCP方式进行连接

fascgi_pass IP地址:端口号 

eg: fascgi_pass 127.0.0.1:9000

// 连接的是本地服务器上端口号为9000的程序,也就是php-fpm

因为可以写ip地址,所有这种连接不仅仅局限于自身服务器,他还可以连接别的服务器上的程序;

方法2: UNIX Domain Socket

fascgi_pass 程序socket所在的位置

eg: fascgi_pass /run/php-fpm/www.sock

// php-fpm程序的sock文件位置


如何解决问题

从上面的描述我们知道了 fascgi_pass 的作用,而我们ngin和php连接就需要通过CGI让两者连接起来;所有要求我们nginx的配置文件里要指明php请求都要提交给php-fpm处理;

观察nginx的配置文件和php-fpm的配置文件 我们能看到,

php-fpm  listen等于的数据 和nginx配置文件中的fascgi_pass不相等,所有我们将php-fpm中的信息改为

listen=127.0.0.1:9000

保存,然后重启php-fpm  [php-fpm 重启命令:systemctl restart php-fpm]

再一次访问域名,我们就得到了PHP文件返回的数据。

提示:centos8 中 php-fpm的配置文件在php-fpm.d下面,网上一些文章都在说php-fpm.conf ,所有不要被误导了;我们找到php-fpm.d文件夹,然后能看到下面的文件中有一个 www.conf的文件;如下

我们需要设置的listen就是在www.conf文件中

在网上查找文章,搜寻问题的时候一定要加上自己部署的环境情况,这样才能搜寻的更精准,有些系统对不上,文章说的文件你根本找不到

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值