编辑

编辑

我想做的是让 Nginx 位于专用服务器上的中间,然后当它看到连接时

anything.(localport).vm.example.net

它将连接传递到 127.0.0.1:localport (http) 和 127.0.0.1:localport2 (https, 2 是区别)

我已使其在 http 上工作。但对于 https ,我需要能够让服务器传递连接来设置 SSL。

这是我当前的 nginx 配置

server {
    listen 195.154.156.215:80;
    server_name ~^(.[^\.]+)(\.)(\d+)\.vm\.example\.net$;

    location / {
      access_log off;
      proxy_pass http://127.0.0.1:$3;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    error_page 501 502 503 /VM-Offline.html;
    location = /VM-Offline.html {
      root   /var/www/html;
    }
}

答案1

Christopher Perrin 是对的,Nginx 需要终止 SSL,但在终止之后,您应该能够再次将代理传递到 https 到本地守护进程。这个问题解决了类似的问题。

不过,我对路由流程有点困惑,您说请求通过公共端口进入,并被路由到两个本地端口?

答案2

这不起作用,因为 nginx 需要读取Host标头来路由请求。如果您想使用 TLS,nginx 需要作为端点,否则它将无法读取标头。据我所知,nginx 无法读取 SNI 来路由请求。

这意味着您必须终止 nginx 代理中的请求,否则它将不起作用。

编辑

我错了。nginx 流模块确实支持读取 SNI 并使用以下方法提取主机名:ngx_stream_ssl_preread_module。这将从 SNI 中提取主机名并使其可以通过变量访问$ssl_preread_server_name。但默认情况下不会构建该模块。

相关内容