使用 PHP7 的 fastcgi_pass 权限被拒绝

jul*_*lio 26 php nginx php7

我正在使用 PHP7.0 运行 LEMP。

我的服务器块中有这个

fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
Run Code Online (Sandbox Code Playgroud)

但是当我打开网站时,它返回一个 502 Bad Gateway。下面是错误日志。

*1 connect() to unix:/var/run/php/php7.0-fpm.sock failed (13: Permission denied) while connecting to upstream, client: xxx.xxx.xxx.xxx, server: example.com, request: "GET / HTTP1.1", upstream: "fsatcgi://unix:/var/run/php/php7.0-fpm.sock:", host: "example.com"
Run Code Online (Sandbox Code Playgroud)

它说Permission Denied。这里有什么问题?我已经检查过,但我似乎无法找到需要给予什么样的许可。

谢谢你。

jul*_*lio 38

我让它工作了。

php 用户是,www-data但 nginx 用户是nginx.

在此处检查 php:/etc/php/7.0/fpm/pool.d/www.conf

listen.owner = www-data
listen.group = www-data
listen.mode = 0660
Run Code Online (Sandbox Code Playgroud)

Nginx 用户在 /etc/nginx/nginx.conf

这指导了我:https : //stackoverflow.com/questions/23443398/nginx-error-connect-to-php5-fpm-sock-failed-13-permission-denied

  • 您可以更改 nginx 以使用 _www-data_ 用户,或者像我一样,使用 `sudo usermod -a -G www-data nginx` 将 _nginx_ 用户添加到 _www-data_ 组 (10认同)

Nan*_*mar 8

我通过采取以下步骤解决了同样的问题。

打开您的www.conf文件(例如:sudo nano /etc/php-fpm.d/www.conf)最后,找到设置 listen.owner 和 listen.group 的行并将它们的值从“nobody”更改为“nginx ”:

listen.owner = nginx
listen.group = nginx
listen.mode = 0660
Run Code Online (Sandbox Code Playgroud)

最后,找到设置用户和组的行并将它们的值从“apache”更改为“nginx”:

user = nginx
group = nginx
Run Code Online (Sandbox Code Playgroud)

重启 php-fpm (sudo service php-fpm restart)

  • **listen.mode = 0666** - 这是一个巨大的安全漏洞,会将套接字中的所有数据暴露给所有用户。 (8认同)