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

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

一个端口 (5006) 上有一个 HTTPS 服务器。我想让它在 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/

答案1

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

为了使其成为 HTTPS,您需要进行以下配置:

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;
    }
}

或者,您可以设置一个 nginxstream代理,它只是将 TCP 流传递到后端,这样 nginx 就不会执行 SSL 终止:

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

这必须超出上下文http范围。

相关内容