我使用流模块来传递无法反向代理的 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有条件(如果只是在流上下文中不起作用)或以另一种方式解决它?