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

Nginx 共用一個公網IP實現多域名轉發映射的原理和實戰

admin
2025年7月21日 0:11 本文熱度 1339

一、Nginx 多域名轉發的原理

在實際產品架構中,常常需要在同一臺服務器/同一 IP 地址上部署多個網站或服務。Nginx 的多域名轉發功能可以很好地解決這個問題。它的原理是:Nginx 會讀取每個 HTTP 請求里的 Host 頭,根據這個信息判斷用戶想訪問哪個域名。只要把不同域名的 DNS A 記錄都指向這臺服務器的 IP,Nginx 就能區分并把請求分發到對應的站點或后端服務。

應用場景如下:

一臺服務器一個 IP,就能掛多個域名(也就是常說的基于名稱的虛擬主機)。Nginx 配置里,每個站點有獨立的 server 塊。不同域名可以連到不同的后端應用或端口。Nginx 會根據域名,把流量反向代理到對應的本地服務或者端口上。這種做法在容器編排環境里也很常見,比如 Kubernetes 的 Ingress 資源,也是通過域名(Host)來做流量路由,讓多個服務共享一個負載均衡 IP。

二、配置示例講解

如上圖所示:多個域名(比如?oi.example.chatapexample.chat**、adexample.chat** 等)都把 DNS 解析指向同一臺服務器的 IP。這臺服務器上,Nginx 監聽 80 和 443 端口,接收所有進來的請求,再根據每個請求的?Host?字段,把流量轉發到不同端口上的本地服務。

在這個例子里,oi.example.chatapexample.chat?和?adexample.chat?這幾個域名的 A 記錄都指向同一個 IP。用戶訪問時,請求頭里的?Host?信息不一樣,Nginx 能識別目標域名,從而套用不同的轉發規則。這樣一來,即使共用一個外網 IP,各自的流量也能準確分流,不會混淆,分別進入自己的應用。

說白了,Nginx 在這里就相當于一個反向代理網關,把外部的多域名訪問都收進來,再按域名分流到不同的內部服務。這么做,不光讓服務器資源用得更充分,管理起來也省事不少——只需開放 80 和 443 兩個端口,就能同時支持多個網站。另外還能設置禁止直接用 IP 訪問,防止繞過域名,也更安全。


三、Nginx 多域名配置示例

假如現在有這樣一個需求:一臺服務器上,用 Nginx 分別轉發這三個域名的流量——

  • ??oi.example.chat:轉到本地 3000 端口(比如網頁應用,支持 WebSocket)。
  • ??api.example.chat:轉到本地 4000 端口(HTTP API 服務)。
  • ??admin.example.chat:轉到本地 5000 端口(后臺管理頁面)。

具體的 Nginx 配置如下。oi.example.chat?這里多加了幾行,是為了讓 WebSocket(比如 Socket.IO)能正常轉發。其他兩個就是常規的 HTTP 代理:

# 對應 oi.example.chat 的配置(含 WebSocket 支持)
server?{
? ??listen80;
? ??server_name?oi.example.chat;

? ??# WebSocket 接口轉發配置
? ??location?/ws/ {
? ? ? ??proxy_pass?http://127.0.0.1:3000;
? ? ? ??# WebSocket 必需的頭設置
? ? ? ??proxy_http_version1.1;
? ? ? ??proxy_set_header?Upgrade?$http_upgrade;
? ? ? ??proxy_set_header?Connection?"upgrade";

? ? ? ??# 保留客戶端請求的關鍵信息轉發給后端
? ? ? ??proxy_set_header?Host?$host;
? ? ? ??proxy_set_header?X-Real-IP?$remote_addr;
? ? ? ??proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;
? ? }

? ??# 普通 HTTP 請求轉發配置
? ??location?/ {
? ? ? ??proxy_pass?http://127.0.0.1:3000;
? ? ? ??proxy_set_header?Host?$host;
? ? ? ??proxy_set_header?X-Real-IP?$remote_addr;
? ? ? ??proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;
? ? }
}

# 對應 api.example.chat 的配置(一般 HTTP API 服務)
server?{
? ??listen80;
? ??server_name?api.example.chat;

? ??location?/ {
? ? ? ??proxy_pass?http://127.0.0.1:4000;
? ? ? ??proxy_set_header?Host?$host;
? ? ? ??proxy_set_header?X-Real-IP?$remote_addr;
? ? ? ??proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;
? ? }
}

# 對應 admin.example.chat 的配置(后臺管理服務)
server?{
? ??listen80;
? ??server_name?admin.example.chat;

? ??location?/ {
? ? ? ??proxy_pass?http://127.0.0.1:5000;
? ? ? ??proxy_set_header?Host?$host;
? ? ? ??proxy_set_header?X-Real-IP?$remote_addr;
? ? ? ??proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;
? ? }
}

上述配置中,三個?server?段共用同一個監聽端口 80,但通過?server_name?區分三個域名,各自指定了不同的轉發目標(本地不同端口的服務)。這樣就實現了一個 IP 上基于域名的虛擬主機路由。需要注意,如果有HTTPS需求,還需對應增加?listen 443 ssl?的配置和證書。下面我們詳細解釋配置中涉及的核心指令。

四、配置中核心指令說明

指令/配置項
作用解釋
注意事項
server_name
定義當前?server?塊匹配的域名。
支持通配符,例如?*.example.com
listen 80;
定義監聽端口。HTTP 默認為 80,HTTPS 為 443。
可以指定監聽的 IP,比如?listen 192.168.1.100:80;
proxy_pass
定義轉發(反向代理)的目標后端地址。
支持填寫 IP+端口,或域名+端口。
proxy_set_header Host $host;
將客戶端請求中的域名傳遞給后端服務。
很多后端服務需要根據該頭識別請求域名,以返回正確的站點內容。
proxy_http_version 1.1;
將轉發協議升級為 HTTP/1.1。WebSocket 必須。
WebSocket 必備
,否則無法完成協議升級。
proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "upgrade";
專門用于支持 WebSocket 協議的頭設置,將 HTTP 連接升級為 WS。
若缺少這兩行,WebSocket 無法正常工作(無法成功升級連接)。

這些配置一起實現了域名轉發:Nginx 收到外部請求后,會把請求“透明”地轉發給對應的內部服務,同時把原始的域名和客戶端 IP 等信息也帶過去。這樣,后端服務就能通過 Host 頭等信息識別是哪個域名的請求,方便后續做對應處理。

五、額外的注意事項

  • ??DNS 配置:要讓域名轉發生效,先把所有要用的域名都解析到 Nginx 服務器的同一個 IP(通常是在域名服務商后臺加 A 記錄)。DNS 配好了,用戶才能用域名正常訪問你的服務。
  • ??默認主機服務:如果有些請求的域名沒有出現在任何?server_name?里,Nginx 會把這些請求交給默認主機處理(一般是配置文件里第一個?server?塊,或者寫了?default_server?的那個)。建議專門加一個默認服務器,要么返回錯誤頁面,要么直接斷開連接(比如用 444 狀態碼)。這樣能防止有人用沒授權的域名或者直接用 IP 訪問你的服務,提高安全性。
  • ??HTTPS 和證書:生產環境下,多個域名一般都要支持 HTTPS。可以分別給每個域名配證書和私鑰,綁定到對應的 443 端口上。Nginx 支持 SNI 技術,可以讓一臺服務器、一個端口(443),同時掛載多個域名證書,這樣就能讓所有域名都走 HTTPS。證書可以用免費的 Let’s Encrypt,也可以用其他機構頒發的。


閱讀原文:原文鏈接


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

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
在线看的国产网站 | 亚洲就去吻婷婷永久网 | 中文字幕不卡在线v | 婷婷丁香五月深爱憿情网 | 亚洲欧美人女户中文字幕 | 日韩精品福利视频第一区 |