nginx 反向代理:使用流模块进行直通和反向代理

nginx 反向代理:使用流模块进行直通和反向代理

我使用流模块来传递 tls 流量,因为无法反向代理,例如因为我没有证书(本地 3CX 安装)或它破坏了某些东西(带有客户端证书的 ssl vpn)。然后我将“其余”转发到同一主机上的另一个 IP(127.0.0.1)进行反向代理。问题是 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 有条件(据我所知,如果在流上下文中不起作用)或以其他方式解决它?

答案1

似乎您需要安装一个前端来3cx解码vpnPROXY 协议并将其转换为实际 Web 服务器的 HTTP 请求。

另一种选择是针对 Web 服务和代理协议设置单独的 nginx 实例。

相关内容