首页 > 软件服务 > WEB软件 > 关于nginx反向代理https回源源机IIS开启SNI的peer closed connection in SSL handshake错误

关于nginx反向代理https回源源机IIS开启SNI的peer closed connection in SSL handshake错误

WEB软件

一、问题情况

因为业务需要,使用了一套IIS源机的https的程序,然后需要使用nginx反代后放入其他域名路径使用,写好以后测试curl源机,代理机curl源机一切OK,但是使用nginx反代后出现502,看nginx报错日志提示

二、解决办法

查到一个说明

"(104: Connection reset by peer) while connecting to upstream"的错误解释是upstream发送了RST,将连接重置,然后看别人说是因为服务器时间不同,造成长链接握手失败,于是改了代理回源超时时间和http版本还有关闭ssl长连接回源都不行.

然后看到一个靠谱一点的解释,由于源机启用SNI 证书部署(PS:一个IP有多个证书)需要向服务器传递域名信息。也就是需要设置下内容。

设置了以后依旧报错502,最后只有去IIS源机关闭SNI(IIS里网站绑定里需要服务器名称指示的一个选项),单独给回源开了个其他的https端口使用,才不报错.源机是win2016,IIS10的,至于为啥会这样也没搞懂.只是根据网上说的各种办法测试了半天,最后发现只有关闭IIS源机的SNI才可以正常使用https回源.

后面又怀疑是upstream的域名转IP造成SNI不正常,代理机使用了hosts文件写了域名IP指定,然后回源的URL直接写域名源机不开SNI也会出现502错误,暂时没有明白为何会这样.

之后又搜索一了一些错误解答,有了点想法,但是没有实践,就是IIS开启SNI的时候,没有设置默认https站点,造成nginx使用upstream的https回源无法找到对应站点而造成ssl握手失败,关闭SNI和开启SNI设置一个默认https站点应该可以解决这个问题.只是想法,未实践测试.