一、前言
小周最近在解决一些国外静态资源加速问题时通过Nginx反向代理但是却报错502。众所周知,一些静态资源托管,例如jsDelivr都是使用的CloudFlare之类的国外服务商,在国内的加速约等于减速,因此小周觉得有必要从官方CDN上自建镜像或者自建反向代理,以实现在国内的加速。
但是小周在反向代理Data Tables却出了一点小问题,反向代理走HTTP时,会被重定向到官方的CDN,但是这显然不是我们想要的,走HTTPS就会显示502.
二、解决方案
检查Nginx的错误日志,报错如下:
[error] 1130164#0: *27567 SSL_do_handshake() failed (SSL: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:SSL alert number 40) while SSL handshaking to upstream
这是出现了一个握手错误,反向代理是通过sslv3协议握手的,但是又众所周知,sslv3协议,基本上绝大部分服务器都是关闭了的,现在使用的最多的大部分都是tlsv1.1、tlsv1.2、tlsv1.3,因此可以指定版本。
proxy_ssl_protocols TLSv1.2
其次,配置了之后还是没有办法。
紧接着,就需要考虑SNI支持,有社区大佬说可能存在Nginx 无法成功 handshake 上游的 SSL,导致502报错,需要按照以下配置:
proxy_ssl_server_name on;
启用SNI支持,果然添加之后,就没有再报错502,能够正常反向代理了。
评论区