这是一个常见的问题,但我仔细检查了建议的解决方案,但没有成功。
这些是来自 PHP 的错误:
Warning: move_uploaded_file(images/img01.jpg): failed to open stream: Permission denied in /usr/share/nginx/html/media/test.php on line 28
Warning: move_uploaded_file(): Unable to move '/tmp/phpRvUCVx' to 'images/img01.jpg' in /usr/share/nginx/html/media/test.php on line 28
服务器已安装 nginx 和 php 7.3(php-fpm)
上传文件夹的权限:
drwxrwxrwx. 2 nginx nginx 6 Apr 5 03:11 images
来自 ps aux | grep php 的信息
centos 24211 0.0 0.0 112708 980 pts/0 S+ 16:01 0:00 grep --color=auto php
root 24674 0.0 0.6 285532 11452 ? Ss Apr04 0:04 php-fpm: master process (/etc/opt/remi/php73/php-fpm.conf)
nginx 24675 0.0 0.4 287740 8724 ? S Apr04 0:00 php-fpm: pool www
nginx 24676 0.0 0.4 287740 8720 ? S Apr04 0:00 php-fpm: pool www
nginx 24677 0.0 0.4 287740 8684 ? S Apr04 0:00 php-fpm: pool www
nginx 24678 0.0 0.5 287916 9232 ? S Apr04 0:00 php-fpm: pool www
nginx 24679 0.0 0.5 287916 9308 ? S Apr04 0:00 php-fpm: pool www
nginx 25107 0.0 0.4 287740 8716 ? S Apr04 0:00 php-fpm: pool www
来自 ps aux | grep nginx 的信息
root 15041 0.0 0.1 125116 2324 ? Ss Apr04 0:00 nginx: master process /usr/sbin/nginx
nginx 15042 0.0 0.2 125956 5328 ? S Apr04 0:00 nginx: worker process
nginx 15043 0.0 0.2 125956 5328 ? S Apr04 0:00 nginx: worker process
nginx 24675 0.0 0.4 287740 8724 ? S Apr04 0:00 php-fpm: pool www
nginx 24676 0.0 0.4 287740 8720 ? S Apr04 0:00 php-fpm: pool www
nginx 24677 0.0 0.4 287740 8684 ? S Apr04 0:00 php-fpm: pool www
nginx 24678 0.0 0.5 287916 9272 ? S Apr04 0:00 php-fpm: pool www
nginx 24679 0.0 0.5 287916 9308 ? S Apr04 0:00 php-fpm: pool www
nginx 25107 0.0 0.4 287740 8716 ? S Apr04 0:00 php-fpm: pool www
centos 26097 0.0 0.0 112712 976 pts/0 S+ 16:39 0:00 grep --color=auto nginx
PHP-FPM 的配置
user = nginx
group = nginx
listen = /var/run/php73-fpm/php73-fpm.sock
listen.owner = nginx
listen.group = nginx
我遗漏了什么?提前致谢
答案1
这里您遇到了多个问题,其中一些可能是您在尝试解决原始问题时自己引入的。
首先,您的 PHP 进程似乎以 nginx 用户身份运行。这不是默认配置,不建议这样做。您应该让它以最初设置的用户 ID 运行。
其次,目录的权限images
允许所有用户写入。这显然是个坏主意,永远都不应该这样做,即使是“测试”也不行。适当设置所有权和权限。如果你觉得这chmod 777
可能对你有帮助,请记住你走错了路。
第三,您似乎将网站文件放在了 下/usr/share/nginx/html
。您不应将此目录用于存放您自己的文件;它仅用于存放 nginx 附带的默认文件。请/srv
改用 下的目录,例如/srv/www
。还要避免使用/var/www
,这是为 Web 服务器默认文件(通常是 Apache httpd 附带的文件)保留的另一个目录。
最后,对于眼前的问题,SELinux 不允许 nginx 或 php-fpm 写入随机目录。您需要通过将其默认上下文设置为,httpd_sys_rw_content_t
然后设置任何现有文件的上下文,来告诉 SELinux 该目录及其内容应该是可写的。例如:
semanage fcontext -a -t httpd_sys_rw_content_t "/srv/www/wherever/images(/.*)?"
restorecon -rv /srv/www/wherever/images