LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

Nginx 中,如何通過 server_name 區分同一端口下不同域名、 主機名的請求以及優先級別

admin
2025年6月28日 23:36 本文熱度 422

在 Nginx 中,通過 server_name 區分同一端口下不同域名/主機名的請求,核心是利用虛擬主機(Server Block) 機制,按以下邏輯匹配:


1. 匹配優先級規則

Nginx 收到請求后,先提取 Host 頭(請求的域名/IP:端口),按以下順序找對應 server

匹配類型
示例配置
優先級
說明
精確匹配
server_name example.com www.abc.com;
最高
完全一致才匹配
通配符前綴
server_name *.example.com;
匹配二級及以上子域
通配符后綴
server_name mail.*;
匹配固定前綴的任意后綴
正則匹配(~ 開頭)
server_name ~^api\d+\.example\.com$;
正則表達式靈活匹配
兜底匹配(_ 或 default
server_name _;
最低
無其他匹配時默認生效

示例

server {
    listen 80;
    server_name example.com www.example.com; # 精確匹配
    ...
}

server {
    listen 80;
    server_name *.example.com; # 匹配 blog.example.com 等子域
    ...
}

server {
    listen 80;
    server_name ~^api\d+\.example\.com$; # 正則匹配 api1.example.com 等
    ...
}

server {
    listen 80;
    server_name _; # 其他未匹配的請求走這里
    return 404;
}

2. 關鍵配置細節

(1)listen 端口與 IP 綁定

若需區分同一端口但不同 IP(服務器多網卡場景),可在 listen 指定 IP:

server {
    listen 192.168.1.10:80; # 僅處理 192.168.1.10 的 80 端口請求
    server_name site1.com;
    ...
}

server {
    listen 192.168.1.20:80; # 僅處理 192.168.1.20 的 80 端口請求
    server_name site2.com;
    ...
}

(2)Host 頭缺失的處理

若請求無 Host 頭(或非法值),Nginx 會找默認 server(同端口下,第一個 server 或顯式標記 default_server 的):

server {
    listen 80 default_server; # 標記為默認,處理無 Host 或不匹配的請求
    server_name _;
    return 400; # 直接返回錯誤
}

(3)HTTPS 場景的 SNI 支持

TLS 握手時,瀏覽器通過 SNI(Server Name Indication) 傳遞 server_name,Nginx 需開啟支持(默認開啟,舊版本需編譯時加 --with-http_ssl_module):

server {
    listen 443 ssl;
    server_name site1.com;
    ssl_certificate /etc/nginx/certs/site1.crt;
    ssl_certificate_key /etc/nginx/certs/site1.key;
    ...
}

server {
    listen 443 ssl;
    server_name site2.com;
    ssl_certificate /etc/nginx/certs/site2.crt;
    ssl_certificate_key /etc/nginx/certs/site2.key;
    ...
}

3. 調試與驗證

(1)檢查配置語法

nginx -t # 驗證配置文件是否正確

(2)查看請求匹配日志

在 error_log 開啟 debug 級別(臨時調試用,別長期開):

error_log /var/log/nginx/error.log debug;

重啟 Nginx 后,請求日志會顯示 server_name 匹配過程。

(3)用 curl 模擬請求

指定 Host 頭測試不同域名:

curl -H "Host: example.com" http://127.0.0.1 # 匹配 example.com 的 server
curl -H "Host: blog.example.com" http://127.0.0.1 # 匹配 *.example.com 的 server

4. 常見問題

  • 問題1:修改 server_name 后不生效
    → 原因:瀏覽器緩存/未重啟 Nginx
    → 解決:nginx -s reload 重啟,或用 curl 繞開瀏覽器緩存測試。

  • 問題2:通配符/正則匹配失效
    → 原因:語法錯誤(如通配符 *.com 不匹配 a.b.com,需寫成 *.b.com 或正則)
    → 解決:嚴格按通配符/正則規則寫,正則用 ~ 標記并轉義 .(如 ~^www\.example\.com$)。

  • 問題3:HTTPS 提示證書錯誤
    → 原因:SNI 未生效(舊瀏覽器/客戶端不支持),或證書綁定錯誤
    → 解決:確認客戶端支持 SNI,檢查 ssl_certificate 與 server_name 對應關系。

通過 server_name 配合 listen,可精準區分同一端口的不同域名請求,核心是利用 Nginx 的虛擬主機匹配規則。調試時重點抓 Host 頭和日志,就能快速定位問題~


閱讀原文:原文鏈接


該文章在 2025/7/1 23:29:42 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲无线码二区在线观看 | 亚洲午夜国内自产拍在线观看 | 中文字幕在线不卡精品视频99 | 日韩欧美无砖专区一中文字幕 | 亚洲国产欧美日韩二区三区蜜月 | 五月婷婷激情五月 |