Linux

Nginx 服務於錯誤的根目錄

  • May 29, 2021

我有 2 sites-enabledserver_name如下:

server_name www.mysite.com mysite.com

server_name dev.mysite.com

**問題:**當我通過其 IP 地址訪問該網站時,通過查看訪問/錯誤日誌,似乎 nginx 正在rootdev.mysite.com.

nginx 如何決定服務哪個?我們可以強制它在使用其 IP 地址訪問該站點時root停止服務嗎?www.mysite.com

會議

server {
   listen   80;
   server_name www.mysite.com mysite.com;
   access_log /var/log/nginx/access.log;
   error_log /var/log/nginx/error.log;
   root /var/www/mysite/public;

   index index.php index.html;

   location / {
       try_files $uri $uri/ /index.php?$args ;
   }
   location ~ \.php$ {
       fastcgi_pass unix:/var/run/php5-fpm.sock;
       fastcgi_index index.php;
       include fastcgi_params;
       fastcgi_read_timeout 300;
   }

}

**簡而言之:**你還沒有告訴 Nginxserver {...}選擇哪個 - 所以它選擇了第一個。

Nginx 將請求傳遞給預設伺服器。為此,它將Host標頭與server_name. 如果使用 IP 地址,則Host標頭將包含 IP 地址(這意味著它可以用於匹配server_name)。

在沒有server_name匹配Host頭的情況下,nginx會按照如下方式選擇伺服器:

  1. 伺服器明確設置為預設值。
  • 這是通過以下方式完成的(在埠 80 的情況下)listen 80 default_server
  1. 如果沒有 default_server,則使用配置中列出的第一個伺服器。
  • 需要注意的是,在使用萬用字元時,nginx中文件包含的順序是不確定的

引用Nginx wiki

如果指令具有default_server參數,則封閉 server {...}塊將是該address:port 對的預設伺服器。這對於基於名稱的虛擬主機很有用,您希望為不匹配任何 server_name 指令的主機名指定預設伺服器塊。如果沒有帶有 default_server 參數的指令,則預設伺服器將是該address:port對出現的第一個伺服器塊。該 default_server參數出現在 0.8.21 版本中,因此不推薦使用預設參數。

推薦閱讀:

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