LNMP 常见502问题汇总

简介:

我们在配置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,调整其级

别,有助于我们看到更多的错误。

本文转自奇迹的少年博客51CTO博客,原文链接http://blog.51cto.com/raffaelexr/1711409如需转载请自行联系原作者


liliangchun

相关文章
|
2月前
|
NoSQL 应用服务中间件 PHP
LNMP一键安装
LNMP一键安装
|
7月前
|
关系型数据库 MySQL 应用服务中间件
LNMP简易搭建
LNMP平台指的是将Linux、Nginx、MySQL和PHP(或者其他的编程语言,如Python、Perl等)集成在一起的一种Web服务器环境。它是一种常用的开发和部署网站的解决方案,适用于构建各种类型的网站和应用程序。
137 2
|
关系型数据库 MySQL 应用服务中间件
LNMP搭建
LNMP搭建
112 0
|
Ubuntu 关系型数据库 MySQL
17.16 LNMP一键安装
本节介绍如何利用下载好的 LNMP 一键安装包在Linux系统上安装 LNMP 环境。
307 0
17.16 LNMP一键安装
|
关系型数据库 MySQL 应用服务中间件
|
关系型数据库 MySQL 应用服务中间件
|
关系型数据库 应用服务中间件 PHP
|
Web App开发 关系型数据库 应用服务中间件
LNMP搭建HDwiki
sed -i 's/SELINUX=enabled/SELINUX=disabled/g' /etc/selinux/config getenforce 0 /etc/init.
956 0
|
关系型数据库 应用服务中间件 PHP
LNMP详解
目录 Nginx配置    1 PHP解析    1 Mysql操作    3 服务安装    3 连接测试    3 数据配置    3 Blogs建立    4   LNMP 环境 Mysql:192.
1309 0