NGINX proxy_pass中的反向SSL终止(将HTTP透明代理到HTTPS,而无需重定向)

时间:2020-07-13 16:02:12

标签: ssl nginx proxy

我正在寻求配置NGINX以在端口80上接受未加密的HTTP通信,并将其proxy_pass传输到上游HTTPS服务器。加密应完全通过NGINX进行管理,允许连接到NGINX服务的客户端有效地将HTTP与HTTPS上游服务进行对话。

我正在使用NGINX配置,如下所示,但是,每当向服务器发出简单的HTTP请求时,我都会收到502网关错误。

upstream https-server {
  server my-upstream-host-which-speaks-https.example.com:443;
}

server {
    listen       80;
    listen  [::]:80;

    location / {
      proxy_pass https://https-server;
    }
}

这是请求失败期间记录的错误。

2020/07/13 15:41:45 [error] 20#20: *1 SSL_do_handshake() failed (SSL: error:1408F10B:SSL routines:ssl3_get_record:wrong version number) while SSL handshaking to upstream, client: 10.244.1.215, server: , request: "GET / HTTP/1.1", upstream: "https://99.86.230.58:443/", host: "nginx.http-cache.svc.cluster.local"
2020/07/13 15:41:45 [warn] 20#20: *1 upstream server temporarily disabled while SSL handshaking to upstream, client: 10.244.1.215, server: , request: "GET / HTTP/1.1", upstream: "https://99.86.230.58:443/", host: "nginx.http-cache.svc.cluster.local"

SO post表示此问题很可能是由于NGINX实际上并未将入站HTTP请求转换为HTTPS,因此上游服务器将原始HTTP请求解释为握手的开始。我如何配置NGINX在代理之前执行HTTP到HTTPS的转换,以便它向自己的客户端说HTTP,但向proxy_pass上游讲HTTPS?

注意:我不希望将HTTP流量重定向到HTTPS,而是proxy_pass而不出现错误。我也肯定会有很多人问:“你为什么要这么做?”我们有一个合法的用例,实际上我们需要MITM后端响应,以便在使用Varnish的缓存配置中正确使用它们。因此,如果将这些类型的评论减少到最低程度,那就太好了:)

0 个答案:

没有答案