编辑新问题:NGINX 可以像 HAProxy(等)一样检查 TLS 请求以查找 SNI 吗?
根据我读到的资料(而且我一直在告诉),NGINX 不应该支持 SNI,我应该使用 HAProxy 来实现 SSL 透明的反向代理。很好。但是,这似乎表明 NGINX 确实支持 SNI,但我找不到任何有用的文档。也就是说,我能找到的所有内容都暗示我仍然必须向 NGINX 提供证书,以便它能够匹配请求的主机名。但这不正是 SNI 试图解决的问题吗?
现在,我开始在同一个 IP 地址上运行大量不同的 HTTPS 站点,这在许多不同的配置中维护相同的信息时会造成损失,所以我想知道我是否最好放弃 NGINX 并学习另一个软件(又名 HAProxy)或者我是否真的可以坚持使用 NGINX——以及如何做到。
理想情况下,我希望代理能够为加密流量提供一种透明隧道,只有客户端和后端服务器(例如,Apache 或我正在运行的任何其他应用程序)能够解密它——这意味着我不必在反向代理的配置中保留证书信息。这意味着我可以从这里开始
server {
listen 443 default ssl;
server_name example.org;
add_header X-Clacks-Overhead "GNU Terry Pratchett";
ssl on;
ssl_certificate /etc/le_certs/example.org/live/example.org/fullchain.pem;
ssl_certificate_key /etc/le_certs/example.org/live/example.org/privkey.pem;
location / {
proxy_pass_header Server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass https://exampleapp;
}
}
到这里
server {
listen 443 default ssl;
server_name example.org;
add_header X-Clacks-Overhead "GNU Terry Pratchett";
location / {
proxy_pass_header Server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass https://exampleapp;
}
}
另外一个好处是,代理的容器根本不需要访问证书(因为这是一个 Docker 设置,所以挂载了大量的卷,从而需要更多的维护)。
答案1
您误解了“缺乏” SNI 支持。
首先,nginx
通常来说“通配符” SSL 设置。支持问题较旧的客户端(即浏览器),无法处理 SNI。