我们在配置LNMP时,总是面临502个问题。 无论是在浏览器中访问还是使用curl命令,都很容易出现“502 Bad Gateway”。 那么,错误的原因是什么? 我该怎么解决? 笔者根据经验进行了总结。
错误1 :配置错误
首先说明一下LNMP环境吧。 顾名思义,LNMP环境由nginx、MySQL和php组成。 但是,nginx的所有者和组是php-fpm。 如何将nginx与php联系起来呢? 有两种模式:套接字模式和tcp/ip格式(或IP :端口格式)。
配置nginx虚拟主机时,配置文件包含以下部分:
位置~. PHP $ {
包括fastcgi _ params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi _ param script _ filename/data/www $ fastcgi _ script _ name;
}
请注意这里的配置文件的加3行。 在这里,笔者使用了IP :端口的形式。 那么,应该什么时候用哪个呢? 应该都可以说。 fastcgi_pass之后的套接字文件路径通常是在套接字模式下通过套接字文件进行连接的,但由于默认套接字文件目录位于/tmp/目录下,因此它始终正确写入否则,一定是502了!
如果未在指定目录下生成. socket文件,该怎么办? 在这种情况下,必须将fastcgi_pass更改为IP :端口的格式。 请注意,如果仅更改此配置式的内容仍为502,则还必须更改另一个配置式(/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=动态
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 :端口格式,以便nginx和php连接,然后再次
加载nginx :/etc/init.d/nginx reload
一句话,这两个地方的形状必须相同。 否则,就会出错。
错误2 :权限
启动nginx后,让我们看看nginx的进程。 PS aux
此时,发现nginx工作流程的所有者和所属组均为nobody
为了解决此类权限问题导致的502错误,请访问配置式/usr/local/PHP/etc/PHP-fpm.conf
里面加两个句子:
listen.owner=nobody
listen.group=nobody
然后重新加载nginx
错误3 :资源耗尽
当LMP架构处理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并调整级别来查看更多错误。