共计 2414 个字符,预计需要花费 7 分钟才能阅读完成。
我们在配置 LNMP 时,总是会遇到 502 的问题,不管是在浏览器中访问还是使用 curl 命令,很容易就出现了“502 Bad Gateway”,那么出错的原因是什么,有该如何解决呢。笔者根据经验总结了一下。
错误一:配置出错
我们先来介绍一下 LNMP 环境,顾名思义,LNMP 环境是由 nginx、MySQL、php 组成的,然而 nginx 的所属用户与组均是 php-fpm,那如何将 nginx 与 php 联系起来呢?这里就有了两种模式,一种是套接字模式,另一种是 tcp/ip 形式(或者叫 ip:port 形式)。
我们在配置 nginx 的虚拟主机时,配置文件中有这么一段:
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
}
请注意这里这段配置文件的正数第三行,这里笔者用的就是 ip:port 的形式,那什么时候该用哪种呢?应该说两种皆可。我们一般默认的是套接字模式,就是通过一个 socket 文件来连接,而默认的 socket 文件目录就是 /tmp/ 目录下,所以 fastcgi_pass 后面的 socket 文件路径一定要写对,不然一定会 502!!
如果我们没有生成在指定目录下没有生成 .socket 文件怎么办呢?这时候我们就需要将 fastcgi_pass 改成 ip : port 的形式,注意如果单单改这个配置文件中的内容依然 502,我们同样需要改另一个配置文件的内容,即 php 的配置文件:/usr/local/php/etc/php-fpm.conf,我们打开文件可以看到以下内容:
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
[www]
listen = 127.0.0.1:9000
user = php-fpm
group = php-fpm
listen.owner = nobody
listen.group = nobody
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
将配置文件中的 listen 部分同样也要改为 ip : port 的形式,这样 nginx 与 php 才能联系起来,然后重新
加载 nginx : /etc/init.d/nginx reload
总而一句话:这两个地方的形式必须一样,不然会出错。
错误二:权限
我们启动 nginx 之后,可以查看一下 nginx 的进程:ps aux |grep nginx
这时我们发现,nginx 的工作进程的属主与属组均为 nobody
所已为了解决这样的权限问题导致的 502 错误,我们需要在配置文件 /usr/local/php/etc/php-fpm.conf
中加两句:
listen.owner = nobody
listen.group = nobody
然后重新加载 nginx
错误三:资源耗尽
LNMP 架构处理 php 时,是 nginx 直接调取后端的 php-fpm 服务,如果 nginx 的请求量偏高,而我们又没有给 php-fpm 配置足够的子进程,那么总有 php-fpm 资源耗尽的时候,一旦耗尽 nginx 则找不到 php-fpm,此时就会导致 502 出现。那这时候的解决方案就是去调整 php-fpm.conf 中的 pm.max_children 数值,使其增加。但也不能无限设置,毕竟服务器的资源有限,根据经验,4G 内存机器如果只跑 php-fpm 和 nginx,不跑 mysql 服务,pm.max_children 可以设置为 150,尽量不要超过该数值,8G 内存可用设置为 300,以此类推。
常见错误就是上面几种,如不能解决,请参考错误日志,配置文件 nginx.conf 中的 error_log,调整其级别,有助于我们看到更多的错误。
Nginx 502 错误触发条件与解决办法汇总 http://www.linuxidc.com/Linux/2014-08/105815.htm
Ubuntu 13.04 安装 LAMP\Vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm
CentOS 6.4 下的 LNMP 生产环境搭建及安装脚本 http://www.linuxidc.com/Linux/2013-11/92428.htm
生产环境实用之 LNMP 架构的编译安装 +SSL 加密实现 http://www.linuxidc.com/Linux/2013-05/85099.htm
LNMP 全功能编译安装 for CentOS 6.3 笔记 http://www.linuxidc.com/Linux/2013-05/83788.htm
CentOS 6.3 安装 LNMP (PHP 5.4,MyySQL5.6) http://www.linuxidc.com/Linux/2013-04/82069.htm
在部署 LNMP 的时候遇到 Nginx 启动失败的 2 个问题 http://www.linuxidc.com/Linux/2013-03/81120.htm
Ubuntu 安装 Nginx php5-fpm MySQL(LNMP 环境搭建) http://www.linuxidc.com/Linux/2012-10/72458.htm
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-11/125068.htm