PHP-FPM:來自 nginx/error.log 的“沒有這樣的文件或目錄”錯誤。路徑或權限問題?
當我在瀏覽器欄中輸入我的 wiki 地址時,我收到“在 stderr 中發送的 FastCGI:“無法打開主腳本:/var/www/mediawiki/index.php(沒有此類文件或目錄)”錯誤。這是我的 PHP-FPM www.conf 文件:
[www] user = nginx group = nginx listen = /var/run/php/php-fpm/php-fpm.sock listen.owner = nginx listen.group = nginx listen.mode = 0660 ;chroot = ;chdir = ;env[HOSTNAME] = $HOSTNAME ;env[PATH] = /usr/local/bin:/usr/bin:/bin ;env[TMP] = /tmp ;env[TMPDIR] = /tmp ;env[TEMP] = /tmp php_value[session.save_handler] = files php_value[session.save_path] = /var/lib/php/session php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache php_value[opcache.file_cache] = /var/lib/php/opcache
這是我的 nginx conf.d 文件:
# HTTP requests will be redirected to HTTPS server { listen 80; listen [::]:80; server_name wiki.example.com; return 301 https://$host$request_uri; } # HTTPS Configuration server { listen 443 ssl; listen [::]:443; server_name wiki.example.com; root /var/www/mediawiki; index index.php; autoindex off; # SSL Certification Configuration ssl_certificate /etc/letsencrypt/live/wiki.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/wiki.example.com/privkey.pem; client_max_body_size 5m; client_body_timeout 60; location / { try_files $uri $uri/ @rewrite; } location @rewrite { rewrite ^/(.*)$ /index.php?title=$1&$args; } location ^~ /maintenance/ { return 403; } #PHP-FPM Configuration NGINX location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { try_files $uri /index.php; expires max; log_not_found off; } location = /_.gif { expires max; empty_gif; } location ^~ ^/(cache|includes|maintenance|languages|serialized|tests|images/deleted)/ { deny all; } location ^~ ^/(bin|docs|extensions|includes|maintenance|mw- config|resources|serialized|tests)/ { internal; } # Security for 'image' directory location ~* images/.*.(html|htm|shtml|php)$ { allow all; types {} default_type text/plain; } # Security for 'image' directory location ^~ /images/ { allow all; try_files $uri /index.php; } }
我覺得這是一個權限問題,或者 php-fpm 守護程序正在查找冗餘文件路徑或其他東西。我嘗試通過執行以下操作通過 nginx conf.d 文件將絕對路徑傳遞給 FPM:
fastcgi_param SCRIPT_FILENAME /var/www/mediawiki/index.php;
無濟於事。所以我知道我指向正確的方向,但它仍然給我同樣的錯誤,這讓我相信我有權限問題。我也試過:
setenforce 0
但這也行不通。我已經 chmod 777 整個目錄,包括 index.php 文件。
一些背景:
我想安裝一個 wikimedia 擴展,它需要新版本的 php(7.0+),我執行的是 5.4,因為它附帶了 CentOS 7 的基本安裝。我不熟悉如何更新 PHP,所以我不小心 yum remove php *,從 remi 安裝 php73,刪除它,重新安裝 php 5.4,最後發現我可以通過啟用 remi-php71.repo 來更新我的基本包。但是,我在這個過程中失去了我的 .conf 和 php.ini 文件。
編輯:
/var/log/nginx/error.log 當我在瀏覽器中訪問我的網站時:
2019/01/22 16:58:19 [error] 10876#0: *1 FastCGI sent in stderr: "Unable to open primary script: /var/www/mediawiki/index.php (No such file or directory)" while reading response header from upstream, client: 10.11.190.1, server: wiki.example.com, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php-fpm/php-fpm.sock:", host: "wiki.example.com"
/var/log/php-fpm/www-access.log:
- 22/Jan/2019:16:58:19 -0700 "GET /index.php" 404 /var/www/mediawiki/index.php /var/www/mediawiki /index.php /index.php
我修復了它,感謝 Christopher 用他
cgi.fix_pathinfo=0
在php.ini中的查詢為我指明了正確的方向。
cgi.fix_pathinfo=0
他的具體問題並沒有解決問題,但我繼續在php.ini中使用附近的設置,並且能夠從 PHP-FPM 抱怨無法打開的 NO 錯誤中得到不同的錯誤消息/var/www/mediawiki/index.php
。這個問題花了我整整 5 天的時間來解決。我真的很感謝克里斯托弗的幫助!
我最終在php.ini中評論了以下幾行:
;cgi.fixpathinfo=0 ;user_dir=/var/www/mediawiki **This is the one that changed the error message
一旦我改變了它,我得到了一個
InvalidArgumentException
,這是由於我php-mysqlnd
從 5.4 > 7.1 升級時沒有安裝。一旦我安裝了它,bam,wiki 就會備份並執行。
我想在大樓裡跑五圈。再次感謝克里斯托弗為我指明了正確的方向!
約旦