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

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

问题描述:

所以我使用以下设置为站点创建一个反向代理,如下所示。Nginx反向代理错误:14077438:SSL SSL_do_handshake()失败

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

但是,得到坏门方法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" 

任何帮助将不胜感激。

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

您发布的错误是因为您的上游没有证书来卸载SSL。为了解决这个问题,你需要将你的proxy_pass指令改为纯HTTP。

proxy_pass http://mysiter.com/; 

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

查看docs了解更多信息。 This blog也可能有用。

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

添加这对代理地点固定它:

proxy_ssl_server_name on;