我有一个标准反向代理,带有 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;
}
此服务器块接收 和http
,https
将所有请求传递到 Tomcathttp
后端并设置标头X-SCHEME
,即http
或https
。然后,您就可以在后端获得所需的信息。