NGINX + PHP-FPM 虛擬主機將 php 請求重定向到錯誤目錄
我的伺服器使用 nginx 設置了 2 個站點。以下是 /etc/nginx/mysite1.conf 中的內容
server { listen 80; server_name test.mysite1.com; #access_log logs/host.access.log main; location / { root /var/www/mysite1; try_files $uri $uri/ /index.php?$args; index index.html index.htm index.php; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/mysite1; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/run/php-fpm/php-fpm-mysite1.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
/etc/php-fpm.d/mysite1.conf 的內容如下
[mysite1] user = nginx group = nginx listen = /run/php-fpm/php-fpm-mysite1.sock listen.owner = nginx listen.group = nginx pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 pm.status_path = /status
mysite2 的配置完全相同(除了將 mysite1 替換為 mysite2)。當兩個 nginx 我的 php-fpm 都啟動時,兩個站點都可以工作。但是任何時候訪問site2 中的php 文件,它都會轉到站點1 的同一個地方。例如,當我訪問http://test.mysite2.com/tester.php時,它會顯示http://test.mysite1。 com/tester.php。
筆記:
- /etc/nginx.conf 中的 server 塊被註釋掉
- 已設置所有權限,因此 nginx 使用者可以 rwx 到所有 /var/www 目錄,並且 SELinux 已被禁用。
- 作業系統:CentOS 7
- ps -ef 顯示 mysite1 和 mysite2 名稱的程序在執行 php-fpm 時啟動
- 儘管我已將 /status 添加到 php-fpm 配置中,但它對任何一個站點都不起作用
- 沒有顯示錯誤日誌(應該有嗎?沒有確切的錯誤消息或任何東西)
非常感謝任何幫助或建議。
問題在於位置塊。
location ~ \.php$ { root /var/www/mysite1; try_files $uri =404; fastcgi_pass unix:/run/php-fpm/php-fpm-mysite1.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
似乎 php-fpm 從 nginx 接收到錯誤的 SCRIPT_FILENAME 參數。
include fastcgi_params;
可能會在您的配置中覆蓋fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
,因為它在下面定義了 1 行。如果 fastcgi_params 文件包含 SCRIPT_FILENAME(查看 /etc/nginx/fastcgi_params - 也許您將此處的 SCRIPT_FILENAME 從更改$document_root$fastcgi_script_name
為/var/www/mysite1/$fastcgi_script_name
?),之前的參數定義將被替換。也可能使用了錯誤的 nginx 伺服器塊(您可以通過對兩者使用不同的訪問日誌來驗證這一點,例如
access_log logs/host1.access.log main;
和access_log logs/host2.access.log main;
),因此 $document_root 解析/var/www/mysite1
為兩個頁面。確保 nginx 接收到正確的 HTTP-Host-header(例如,當您通過 IP 訪問 Web 伺服器時,這將不起作用)。如果這不起作用,請嘗試在下方使用固定的SCRIPT_FILENAME
include fastcgi_params
,如下所示:... fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /var/www/mysite1/$fastcgi_script_name; ... ... fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /var/www/mysite2/$fastcgi_script_name; ...