nginx反向代理https网站配置

有老同事前段时间问我,为何最近几年都没怎么更新博客了。我说这两年实在是太忙了,虽然做的事情还是比较多,但是真的是很少有自己的时间静下来写一下blog。

回到主题,我们有时需要在一些特殊的内网环境访问多个https的网站,但是又没有集中的NAT网关。这个时候可以利用nginx做一个集中的代理。代理HTTP的时候是很简单的,简单配置一下proxy_pass到特定的HTTP地址或者是upstream就行,但是如果目标的网站是多个https的,则因为我们没有证书无法简单实现。

幸运的时随着各种客户端对https sni的支持,可以使用TCP模式的代理来支持这种场景,基于对SSL SNI的识别去选择upstream。一个简单的示例如下:


map $ssl_preread_server_name $selected_upstream {
    dockerauth.dockerhub.com upstream_dockerauth;
    reg.dockerhub.com upstream_reg;
    dauth.dockerhub.com  upstream_dauth;
    default  upstream_dauth;
}
upstream upstream_dockerauth { dockerauth.dockerhub.com :443; }
upstream upstream_reg { server reg.dockerhub.com:443; }
upstream upstream_dauth { server dauth.dockerhub.com:443; }

server {
    listen 0.0.0.0:443;
    proxy_pass $selected_upstream;
#   proxy_pass $ssl_preread_server_name:443;
    ssl_preread on;
    }

此条目发表在nginx分类目录。将固定链接加入收藏夹。