在反向代理和代理服务器之间禁用 SSL

在反向代理和代理服务器之间禁用 SSL

我有一个标准反向代理,带有 nginx 和 Tomcat 8。

我希望 nginx 处理加密,但仍告知 tomcat 连接是否安全。

我有

location /{
 listen 80;
 proxy_pass http://backend:8080;
}

location /{
  listen 443 ssl;
  proxy_pass https://backend:8443;
}

tomcat 具有以下配置:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="false" scheme="https" secure="true" clientAuth="false" URIEncoding="UTF-8"/>

但是我得到了错误

SSL_do_handshake() failed (SSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol) while SSL handshaking to upstream, client: 185.3.147.237, server: backing, request: "GET /favicon.ico HTTP/1.1", upstream: "https://127.0.0.1:8443/favicon.ico", host: "

我如何告诉 nginx 尽管地址以 https 开头,但与后端的连接未加密?

答案1

您的 Tomcat 配置有SSLEnabled=false。因此,您的 Tomcat 监听8443端口上的标准 HTTP,而 nginx 无法连接到它。

我将实现这一点,以便使用单个上游端口到 Tomcat,并设置包含 SSL 状态的 HTTP 标头。如下所示:

server {
    listen 80;
    listen 443 ssl;
    server_name example.com;
    proxy_set_header X-SCHEME $scheme;

    proxy_pass http://backend:8080;
}

此服务器块接收 和httphttps将所有请求传递到 Tomcathttp后端并设置标头X-SCHEME,即httphttps。然后,您就可以在后端获得所需的信息。

相关内容