Nginx
PHP move_uploaded_file 失敗
這是一個常見問題,但我仔細檢查了建議的解決方案,但沒有成功。
這些是來自 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
我錯過了什麼?提前致謝
您在這裡遇到了多個問題,其中一些問題可能是您在嘗試解決原始問題時介紹的。
首先,您的 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