Nginx

nginx Reverse-Proxy:使用流模組進行直通和反向代理

  • February 18, 2022

我使用流模組來傳遞無法反向代理的 tls 流量,例如因為我沒有證書(本地 3CX 安裝)或者它破壞了東西(帶有客戶端證書的 ssl vpn)。然後我將“rest”轉發到同一主機(127.0.0.1)上的不同 IP 以進行反向代理。問題是 remote_addr 並不總是 127.0.0.1 並且似乎沒有辦法設置“真實”遠端地址。為了規避這一點,我啟用了 proxy_protocol 並使用了 $proxy_protocol_addr。

然而,這打破了所有直通網站,我還沒有找到一種方法來有條件地只為“預設”啟用 proxy_protocol

我這樣做是為了在 sni 上進行匹配,並為所有網站使用一個 IP。

我並沒有完全以這種方式做事,如果有人知道如何以不同/更好的方式實現這一目標,我會全力以赴。

stream {
 map $ssl_preread_server_name $targetBackend {
   3cx.example.com  192.168.1.2:443;
   vpn.example.com  192.168.1.3:443;
   default  127.0.0.1:443;
 }
 server {
   listen 192.168.1.100:443;
   proxy_connect_timeout 1;
   proxy_timeout 3s;
   resolver 192.168.1.1;
   proxy_protocol on;
   proxy_pass $targetBackend;
   ssl_preread on;
 }

所以……如何使proxy_protocol有條件(如果只是在流上下文中不起作用)或以另一種方式解決它?

看來您需要安裝一個前端3cxvpn解碼 PROXY 協議並將其轉換為實際網路伺服器的 HTTP 請求。

另一種選擇是為 Web 服務和代理協議提供單獨的 nginx 實例。

引用自:https://serverfault.com/questions/1093881