當請求走進 nginx 時,會依次匹配每一個 server 和 location 塊。
當某個請求訪問了未綁定的 server_name,由於每個 server 和 location 都訪問不上,就會默認選擇第一個,下面舉例說明:
nginx配置文件節選
server {
location {
server_name a.example.com;
index index.html;
}
location {
server_name b.example.com;
index index.html;
}
}
當請求訪問的地址是 c.example.com 的時候會發生什麼?
答案是請求匹配到了 a.example.com。
所以爲了阻止這種情況的發生,可以配置一個默認的 server 塊用於阻止非法請求:
server {
listen 80;
listen 443;
return 444;
}
server {
location {
server_name a.example.com;
index index.html;
}
location {
server_name b.example.com;
index index.html;
}
}
另外,你還可以通過先顯式指定 default_server 的方式:
server {
listen 80 default_server;
listen 443 default_server;
return 444;
}
這樣你就不必依賴 server 塊配置的順序了,推薦。