
1 前言
笔者需要内网需要使用反向代理获取docker的源,详细的配置如下,
cat /etc/nginx/conf.d/docker.cmdschool.org.conf
可见如下配置,
proxy_cache_path /cache/docker.cmdschool.org levels=2:2:2 keys_zone=docker.cmdschool.org:10m inactive=30d max_size=1g; server { listen 80; server_name docker.cmdschool.org; location / { proxy_pass https://download.docker.com; #proxy_set_header Host download.docker.com; proxy_cache docker.cmdschool.org; proxy_cache_valid 200 1d; proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; } }
配置完成后,笔者通过查看如下日志,
tail -f /var/log/nginx/error.log
可见如下错误,
2019/09/21 14:06:26 [error] 31149#31149: *15 SSL_do_handshake() failed (SSL: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure) while SSL handshaking to upstream, client: 10.168.0.165, server: docker.cmdschool.org, request: "GET / HTTP/1.1", upstream: "https://13.225.103.65:443/", host: "docker.cmdschool.org" 2019/09/21 14:06:26 [warn] 31149#31149: *15 upstream server temporarily disabled while SSL handshaking to upstream, client: 192.168.0.165, server: docker.cmdschool.org, request: "GET / HTTP/1.1", upstream: "https://13.225.103.65:443/", host: "docker.cmdschool.org"
2 基础知识
2.1 什么服务器名称指示扩展
– 服务器名称指示扩展,英文缩写为SNI
– 服务器名称指示扩展是传输层安全(TLS)计算机网络协议的扩展
– 服务器名称指示扩展是客户端可以通过该协议在握手过程开始时指示其尝试连接的主机名
2.2 服务器名称指示扩展的作用
– 服务器名称指示(SNI)允许服务器在同一IP地址和TCP端口号上使用多个证书
2.3 TLS的请求原理
– 客户端向Web服务器发起TLS链接请求
– 服务器向客户端返回证书
– 客户端检查证书后,将尝试将连接名称和证书中包含的名称进行对比
– 如果匹配成功,则连接继续,否则将发出警告用户并可能终止链接
2.4 服务器名称指示扩展的需求背景
– 早起由于没有虚拟主机概念,同一IP地址的同一服务器使用多个DNS名称遇到困难
– 虚拟机概念出现后,服务器将客户端请求的域名作为协议的一部分
– 服务器根据请求的域名选择出与域名匹配的证书返回给客户端,从而解决了此问题
2.5 Nginx的服务器名称指示扩展
Nginx通过以上参数开启或关闭服务器名称指示扩展(默认为关闭),
proxy_ssl_server_name on | off;
详细请参阅以下链接,
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ssl_server_name
所以,我们需要开启服务器名称指示扩展支持。
3 最佳实践
3.1 修改配置
vim /etc/nginx/conf.d/docker.cmdschool.org.conf
加入如下配置,
[...] location / { [...] proxy_ssl_server_name on; proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; } [...]
3.2 重启服务使配置生效
/etc/init.d/nginx restart
参阅文档
==============================
官方文档
———-
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ssl_server_name
https://en.wikipedia.org/wiki/Server_Name_Indication
非官方文档
———–
https://cloud.tencent.com/developer/ask/46573/answer/73813
http://api-gateway-tips.blogspot.com/2016/01/amazon-api-gateway-behind-nginx.html
没有评论