试图代理HTTPS,但得到:收到意外的TLS数据包

在一个端口上有一个HTTPS服务器(5006)。 我想在35001上提供它,并在同样的35001上也提供其他服务(通过添加/app/auth/admin等位置)。

服务器是auth-server.org.local 。 试着添加一个端口:

 server { listen 35001; location / { proxy_pass https://auth-server.org.local:5006; } } 

输出:

 $ curl -k -X GET https://auth-server.org.local:5006 <h1>My auth server</h1> $ curl -k -X GET https://auth-server.org.local:35001 curl: (35) gnutls_handshake() failed: An unexpected TLS packet was received. 

为什么35001不起作用? 我错过了什么? 我使用过这个指南: https : //www.nginx.com/resources/admin-guide/nginx-https-upstreams/

您的虚拟服务器是HTTP服务器,因此它不适用于https连接尝试。

为了使其HTTPS,你需要有这样的configuration:

 server { listen 35001 ssl; server_name example.com; ssl_certificate /path/to/ssl/certificate; ssl_certificate_key /path/to/ssl/certificate; location / { proxy_pass https://auth-server.local:5006; } } 

或者,您可以设置一个nginx stream代理,它只是将TCPstream传递到后端,以便nginx不执行SSL终止:

 stream { server { listen 35001; proxy_pass auth-server.local:5006; } } 

这必须在http上下文之外。