RHEL9.4+NGINX环境下PHP touch()权限拒绝问题修复求助
修复PHP脚本写入权限问题的方案
1. 确认PHP-FPM的运行用户
执行命令查看PHP-FPM进程的所属用户:
ps aux | grep php-fpm
输出结果的第一列就是PHP-FPM的运行用户(常见的如apache、nginx或www-data)。
2. 给PHP-FPM用户赋予写入权限
方法一:将PHP-FPM用户加入nginx用户组(推荐)
假设查到的PHP-FPM用户是apache,执行以下命令将其加入nginx用户组:
usermod -aG nginx apache
然后重启PHP-FPM使配置生效:
systemctl restart php-fpm
由于job/目录的组权限为7(读写执行),加入nginx组后,PHP-FPM用户即可拥有该目录的写入权限。
方法二:调整job目录的属主
若不想修改用户组,可直接将job/目录的属组改为PHP-FPM用户的组(或属主改为PHP-FPM用户):
比如PHP-FPM用户是apache:
chown myuser:apache /www/html/job
修改后同样需要重启PHP-FPM。
3. 检查SELinux(RHEL默认开启,易导致权限问题)
若上述操作后仍报错,先临时关闭SELinux测试:
setenforce 0
若关闭后可正常写入,说明是SELinux限制导致,需配置永久规则:
semanage fcontext -a -t httpd_sys_rw_content_t "/www/html/job(/.*)?" restorecon -Rv /www/html/job
该命令会给job/目录添加允许HTTP服务写入的SELinux上下文。
额外注意:NGINX与PHP-FPM的连接方式需一致
你的PHP-FPM配置使用的是Unix套接字/run/php-fpm/www.sock,但NGINX配置中fastcgi_pass写的是127.0.0.1:9000,二者需保持一致:
- 要么将NGINX的
fastcgi_pass改为unix:/run/php-fpm/www.sock - 要么修改PHP-FPM池配置(如
/etc/php-fpm.d/www.conf),使其监听127.0.0.1:9000
修改完成后重启NGINX和PHP-FPM服务。
内容的提问来源于stack exchange,提问作者Raptor
相关产品推荐
相关产品推荐

