
我有一個公共 IP 位址。我試圖允許透過連接埠 80 和 443 上的公共 IP 存取多個服務,並按請求的伺服器名稱進行區分。
然而,一項服務需要傳輸控制協定反向代理在公共 IP 上的連接埠 80 和 443 上運作。另一個需要TCP 反向代理,但僅在連接埠443 上。 。
我可以根據需要啟動盡可能多的虛擬機器和私人 IP,以保持簡單,但僅限於一個公用 IP 位址。
我可以使用 SNI 將 nginx 設定為反向代理來執行此操作嗎?理論上,我認為我應該能夠使用定向到適當伺服器的 SNI 透過主機名稱對所有內容進行 tcp 流傳輸,並使用第二個 Web 伺服器,該伺服器具有所需的網站設定來偵聽不同的連接埠。例如,nginx.conf:
stream {
map $ssl_preread_server_name $name {
serviceone.domain.tld serviceone;
servicetwo.domain.tld servicetwo;
website1.domain.tld website1;
website2.domain.tld website2;
}
upstream serviceone {
server 10.1.99.7:443;
}
upstream servicetwo {
server 10.1.99.20:443;
}
upstream website1 {
server 10.1.99.30:10443;
}
upstream website2 {
server 10.1.99.30:10444;
}
server {
listen 443;
listen 80;
resolver 8.8.8.8;
proxy_pass $name;
ssl_preread on;
}
}
我的 nginx.conf 中有一些與上面類似的東西,但在理解連接埠 80 請求如何進入等式方面有點困難(我只是在伺服器區塊中打聽 80,但無法解釋如何處理請求如果請求相同的伺服器名稱,則區分443 和80)
我對使用 nginx 或 haproxy 等更好的方法持開放態度。
答案1
只需為每個主機名稱使用單獨的 server{...} 區塊。
它不需要依賴額外的模組即可完成這項工作,如果上游伺服器在代理程式所需的配置上有所不同,將為您省去很多麻煩。