相信进行web开发都会遇到一个熟悉的问题:502.
502表示nginx无法与后端的代理接口(也就是nginx配置中的proxy_pass, 如php-fpm), 进行通讯,而造成这个原因除了后端接口挂掉外,大部分是权限问题,主要分为以下两种情况:
- nginx 的工作进程权限与php-fpm.sock的权限不匹配
-
php-fpm的工作进程权限与当前项目的工作目录的权限不匹配
对于第一种情况,需要将nginx.conf的配置文件的user指令指定的user,group组与php-fpm.d/www.conf的如下配置项:
listen.owner = *
listen.group = *
listen.mode = 0660
配置成相同的用户和用户组,比如下面的配置就是满足权限一致的
# nginx
user nobody nobody;
# php-fpm.d/www.conf
listen.owner = nobody
listen.group = nobody
listen.mode = 0660
第二种情况,则需要php-fpm.d/www.conf的user, group配置项所指定的用户组与工作目录的用户组是一致的,如:
php-fpm.d/www.conf中配置:
user = nobody
group = nobody
那么工作目录的权限应该这么去设置
chown -R nobody:nobody working_dir
总结下来就是要保证用户及用户组的一致性即可。另外查看进程的用户,用户组,可使用如下的shell命令:
ps aux | grep process_name