安装nginx/1.19.1与PHP7.4.8后访问info.php遇权限拒绝错误原因
嘿,先看你的错误日志,这里藏着个关键线索:
2020/07/30 10:30:10 [crit] 24996#24996: *1 connect() to unix:/var/run/php/php7.2-fpm.sock failed (13: Permission denied) while connecting to upstream...
但你贴的Nginx配置里,fastcgi_pass明明写的是php7.4-fpm.sock,这俩路径对不上啊!这是第一个要搞定的问题。
先排查配置冲突
你在server块里引用了snippets/fastcgi-php.conf,这个片段文件很可能已经定义了fastcgi_pass,直接覆盖了你自己写的设置。先打开看看:
cat /etc/nginx/snippets/fastcgi-php.conf
如果里面有一行fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;,直接把它改成php7.4-fpm.sock就行。
再解决权限问题(路径正确后)
要是路径改对了还是报权限拒绝,就得检查PHP-FPM sock文件的权限和归属了:
- 先看sock文件的当前权限:
ls -l /var/run/php/php7.4-fpm.sock
正常来说,这个文件的所属组应该是Nginx运行的用户(一般是www-data),权限至少是660,这样Nginx才能读写。
- 修改PHP-FPM的池配置:
打开/etc/php/7.4/fpm/pool.d/www.conf,找到下面这几行,确保配置正确:
listen.owner = www-data listen.group = www-data listen.mode = 0660
要是Nginx用的不是www-data,就把上面的用户组改成你Nginx实际运行的用户(可以用ps aux | grep nginx查)。改完后重启PHP-FPM:
systemctl restart php7.4-fpm
- 最后重启Nginx让所有配置生效:
systemctl restart nginx
额外小提示:清理旧PHP版本的残留
你装了PHP7.4,但日志里出现了7.2的sock,说不定旧版本的PHP-FPM还在跑?检查一下:
systemctl status php7.2-fpm
要是它还在运行,直接停掉并禁用,省得以后搞混:
systemctl stop php7.2-fpm systemctl disable php7.2-fpm
内容的提问来源于stack exchange,提问作者Dani

