Nginx反向代理错误:14077438:SSL SSL_do_handshake()失败

Mua*_*afi 6 ssl proxy reverse-proxy nginx

所以我使用以下设置为网站创建一个反向代理,如下所示.

  server {
     listen 80;
     server_name mysite.com;
     access_log  /var/log/nginx/access.log;
     error_log  /var/log/nginx/error.log;
     root /home/ubuntu/p3;
   location / {
     proxy_pass  https://mysiter.com/;
     proxy_redirect  https://mysiter.com/ $host;
     proxy_set_header Accept-Encoding "";
    }
  }
Run Code Online (Sandbox Code Playgroud)

但得到BAD GATE WAY 502错误,以下是日志.

2016/08/13 09:42:28 [error] 26809#0: *60 SSL_do_handshake() failed (SSL: error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error) while SSL handshaking to upstream, client: 103.255.5.68, server: mysite.com, request: "GET / HTTP/1.1", upstream: "https://105.27.188.213:443/", host: "mysite.com"
2016/08/13 09:42:28 [error] 26809#0: *60 SSL_do_handshake() failed (SSL: error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error) while SSL handshaking to upstream, client: 103.255.5.68, server: mysite.com, request: "GET / HTTP/1.1", upstream: "https://105.27.188.213:443/", host: "mysite.com"
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

Gun*_*ars 15

在Nginx 1.9.0上看到完全相同的错误,看起来它是由使用SNI的HTTPS端点引起的.

将其添加到代理位置修复它:

proxy_ssl_server_name on;


Kee*_*nce 7

您的配置有一些奇怪的地方。首先你要代理什么?您是否有另一个服务器块,其服务器名称mysiter.com侦听为该应用程序提供服务的端口 443?如果是,那么您需要的是 301 重定向到您的 443 块。如果没有,那么代理将落在同一位置块中,形成循环(因为您没有指定不同的端口)。

您发布的错误是因为您的上游没有用于卸载 SSL 的证书。要解决此问题,您需要将proxy_pass指令更改为纯 HTTP。

proxy_pass  http://mysiter.com/;
Run Code Online (Sandbox Code Playgroud)

或者您需要提供证书供后端服务器使用。

查看文档以获取更多信息。这个博客可能也有用。