按伺服器主機名稱反向 TCP 代理連接埠 80 和 443

按伺服器主機名稱反向 TCP 代理連接埠 80 和 443

我有一個公共 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{...} 區塊。

它不需要依賴額外的模組即可完成這項工作,如果上游伺服器在代理程式所需的配置上有所不同,將為您省去很多麻煩。

相關內容