nginx 多個 server_name 如何匹配?

nginx 多個 server_name 如何匹配?
簡單看這個問題,會覺得這個問題很蠢,怎麼匹配?不就是根據 server_name 名字匹配的麼?

是的,我最開始也是這麼覺得的,並且在之前的筆記:Nginx學習日誌(二)通過反向代理將不同域名映射到不同的端口 當中的記錄也是根據名字匹配。

但是當我新解析一個域名:blog.hjljy.cn 到服務器上面的時候, nginx server_name 裏面還沒有來得及配置這個域名只配置了:www.hjljy.cn 這個域名,這時在瀏覽器輸入 blog.hjljy.cn 這個域名,按照上面的想法應該是找不到服務器的。而事實的結果是儘管訪問的是 blog.hjljy.cn 但是最終跳轉到了 www.hjljy.cn 。

然後在 nginx 配置了多個 server_name ,訪問對應的域名都可以跳轉到對應的域名服務上去,情況符合之前寫的筆記:Nginx學習日誌(二)通過反向代理將不同域名映射到不同的端口 。

但是當我又新解析一個域名:api.hjljy.cn 到服務器上面的時候, 發現訪問這個 api.hjljy.cn,還是會跳轉到 www.hjljy.cn 上面去。

最終經過多次嘗試和查閱資料得到以下的結論:

1 確實是通過 server_name 進行匹配然後轉發請求的
2 如果沒有匹配的 server_name,會默認跳轉到 default_server 去 然後由 default_server 處理這個請求。
3 如果有匹配的 server_name 但是在這個 server 裏面沒有這個請求的處理方式的話,也會默認跳轉到 default_server 去。
例如: blog.hjljy.cn 只配置了下面的請求處理方式。 當我的請求爲: blog.hjljy.cn/501.html 並且對應的請求能夠正常轉發就可以正常進入 但是如果是 blog.hjljy.cn/401.html 就會跳轉到 www.hjljy.cn/401.html

location = /50x.html {
root /usr/local/nginx/html/myerror;
}

default_server 的問題
顯示指定

listen 80 default_server;
1
不顯示指定的話,默認第一個 server_name

參考:https://www.oschina.net/question/12_3565 算是一種對於不匹配的請求的處理方式,雖然我現在沒有用,不過可以記錄下來方便以後可能用到。

server {
listen 80 default_server;
server_name _;
return 404;
}
————————————————
版權聲明:本文爲CSDN博主「光滑的禿頭」的原創文章,遵循 CC 4.0 BY 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/ycf921244819/java/article/details/104452281

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章