Linux
Nginx 服務於錯誤的根目錄
我有 2
sites-enabled
,server_name
如下:server_name www.mysite.com mysite.com
和
server_name dev.mysite.com
**問題:**當我通過其 IP 地址訪問該網站時,通過查看訪問/錯誤日誌,似乎 nginx 正在
root
為dev.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; } }
**簡而言之:**你還沒有告訴 Nginx
server {...}
選擇哪個 - 所以它選擇了第一個。Nginx 將請求傳遞給預設伺服器。為此,它將
Host
標頭與server_name
. 如果使用 IP 地址,則Host
標頭將包含 IP 地址(這意味著它可以用於匹配server_name
)。在沒有
server_name
匹配Host頭的情況下,nginx會按照如下方式選擇伺服器:
- 伺服器明確設置為預設值。
- 這是通過以下方式完成的(在埠 80 的情況下)
listen 80 default_server
- 如果沒有 default_server,則使用配置中列出的第一個伺服器。
- 需要注意的是,在使用萬用字元時,nginx中文件包含的順序是不確定的
引用Nginx wiki:
如果指令具有
default_server
參數,則封閉server {...}
塊將是該address:port
對的預設伺服器。這對於基於名稱的虛擬主機很有用,您希望為不匹配任何 server_name 指令的主機名指定預設伺服器塊。如果沒有帶有 default_server 參數的指令,則預設伺服器將是該address:port
對出現的第一個伺服器塊。該default_server
參數出現在 0.8.21 版本中,因此不推薦使用預設參數。推薦閱讀: