Nginx

NGINX + PHP-FPM 虛擬主機將 php 請求重定向到錯誤目錄

  • February 6, 2018

我的伺服器使用 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;
...

引用自:https://serverfault.com/questions/895829