nginx与php-fpm通信的权限问题

相信进行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