Nginx
nginx Reverse-Proxy:使用流模組進行直通和反向代理
我使用流模組來傳遞無法反向代理的 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有條件(如果只是在流上下文中不起作用)或以另一種方式解決它?
看來您需要安裝一個前端
3cx
並vpn
解碼 PROXY 協議並將其轉換為實際網路伺服器的 HTTP 請求。另一種選擇是為 Web 服務和代理協議提供單獨的 nginx 實例。