亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

Nginx 共用一個(gè)公網(wǎng)IP實(shí)現(xiàn)多域名轉(zhuǎn)發(fā)映射的原理和實(shí)戰(zhàn)

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

一、Nginx 多域名轉(zhuǎn)發(fā)的原理

在實(shí)際產(chǎn)品架構(gòu)中,常常需要在同一臺(tái)服務(wù)器/同一 IP 地址上部署多個(gè)網(wǎng)站或服務(wù)。Nginx 的多域名轉(zhuǎn)發(fā)功能可以很好地解決這個(gè)問題。它的原理是:Nginx 會(huì)讀取每個(gè) HTTP 請(qǐng)求里的 Host 頭,根據(jù)這個(gè)信息判斷用戶想訪問哪個(gè)域名。只要把不同域名的 DNS A 記錄都指向這臺(tái)服務(wù)器的 IP,Nginx 就能區(qū)分并把請(qǐng)求分發(fā)到對(duì)應(yīng)的站點(diǎn)或后端服務(wù)。

應(yīng)用場(chǎng)景如下:

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

二、配置示例講解

如上圖所示:多個(gè)域名(比如?oi.example.chatapexample.chat**、adexample.chat** 等)都把 DNS 解析指向同一臺(tái)服務(wù)器的 IP。這臺(tái)服務(wù)器上,Nginx 監(jiān)聽 80 和 443 端口,接收所有進(jìn)來的請(qǐng)求,再根據(jù)每個(gè)請(qǐng)求的?Host?字段,把流量轉(zhuǎn)發(fā)到不同端口上的本地服務(wù)。

在這個(gè)例子里,oi.example.chat、apexample.chat?和?adexample.chat?這幾個(gè)域名的 A 記錄都指向同一個(gè) IP。用戶訪問時(shí),請(qǐng)求頭里的?Host?信息不一樣,Nginx 能識(shí)別目標(biāo)域名,從而套用不同的轉(zhuǎn)發(fā)規(guī)則。這樣一來,即使共用一個(gè)外網(wǎng) IP,各自的流量也能準(zhǔn)確分流,不會(huì)混淆,分別進(jìn)入自己的應(yīng)用。

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


三、Nginx 多域名配置示例

假如現(xiàn)在有這樣一個(gè)需求:一臺(tái)服務(wù)器上,用 Nginx 分別轉(zhuǎn)發(fā)這三個(gè)域名的流量——

  • ??oi.example.chat:轉(zhuǎn)到本地 3000 端口(比如網(wǎng)頁應(yīng)用,支持 WebSocket)。
  • ??api.example.chat:轉(zhuǎn)到本地 4000 端口(HTTP API 服務(wù))。
  • ??admin.example.chat:轉(zhuǎn)到本地 5000 端口(后臺(tái)管理頁面)。

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

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

? ??# WebSocket 接口轉(zhuǎn)發(fā)配置
? ??location?/ws/ {
? ? ? ??proxy_pass?http://127.0.0.1:3000;
? ? ? ??# WebSocket 必需的頭設(shè)置
? ? ? ??proxy_http_version1.1;
? ? ? ??proxy_set_header?Upgrade?$http_upgrade;
? ? ? ??proxy_set_header?Connection?"upgrade";

? ? ? ??# 保留客戶端請(qǐng)求的關(guān)鍵信息轉(zhuǎn)發(fā)給后端
? ? ? ??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 請(qǐng)求轉(zhuǎn)發(fā)配置
? ??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;
? ? }
}

# 對(duì)應(yīng) api.example.chat 的配置(一般 HTTP API 服務(wù))
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;
? ? }
}

# 對(duì)應(yīng) admin.example.chat 的配置(后臺(tái)管理服務(wù))
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;
? ? }
}

上述配置中,三個(gè)?server?段共用同一個(gè)監(jiān)聽端口 80,但通過?server_name?區(qū)分三個(gè)域名,各自指定了不同的轉(zhuǎn)發(fā)目標(biāo)(本地不同端口的服務(wù))。這樣就實(shí)現(xiàn)了一個(gè) IP 上基于域名的虛擬主機(jī)路由。需要注意,如果有HTTPS需求,還需對(duì)應(yīng)增加?listen 443 ssl?的配置和證書。下面我們?cè)敿?xì)解釋配置中涉及的核心指令。

四、配置中核心指令說明

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

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

這些配置一起實(shí)現(xiàn)了域名轉(zhuǎn)發(fā):Nginx 收到外部請(qǐng)求后,會(huì)把請(qǐng)求“透明”地轉(zhuǎn)發(fā)給對(duì)應(yīng)的內(nèi)部服務(wù),同時(shí)把原始的域名和客戶端 IP 等信息也帶過去。這樣,后端服務(wù)就能通過 Host 頭等信息識(shí)別是哪個(gè)域名的請(qǐng)求,方便后續(xù)做對(duì)應(yīng)處理。

五、額外的注意事項(xiàng)

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


閱讀原文:原文鏈接


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