一、集群里的 HTTPS 不只是“单机搬过去”¶
原笔记在完成单机 HTTPS 之后,继续讲了“网站集群 HTTPS 配置”,并明确给出了两类思路:
- 全部进行加密
- 部分进行加密
这说明集群环境下的 HTTPS,不只是把单机 443 配置复制一遍,而是要先想清楚:
- 用户到 LB 是否加密
- LB 到 Web 是否也继续加密
这两种选择会直接影响:
- 配置复杂度
- 性能开销
- 抓包时看到的是明文还是 TLS
二、什么是“全部加密”¶
原笔记对全链路加密的理解是:
- 用户 -> LB:HTTPS
- LB -> Web:也是 HTTPS
也就是说,从客户端一直到后端 Web,请求始终保持加密状态。
这种方案的优点在于:
- 链路更完整
- LB 后面的网络流量也不会以明文形式传输
但它也意味着:
- Web 节点也必须部署证书
- LB 与 Web 间的代理地址也要走
https://
三、全链路加密时 Web 端怎么配置¶
原笔记先在 Web 主机上准备证书目录:
mkdir -p /etc/nginx/ssl_keys/
unzip 11654958_www.harbor-local.cn_nginx.zip -d /etc/nginx/ssl_keys/
然后配置 HTTPS 站点:
server {
listen 443 ssl;
server_name ssl.harbor-local.cn;
root /app/code/ssl;
ssl_certificate /etc/nginx/ssl_keys/www.harbor-local.cn.pem;
ssl_certificate_key /etc/nginx/ssl_keys/www.harbor-local.cn.key;
error_log /var/log/nginx/ssl-error.log notice;
access_log /var/log/nginx/ssl-access.log main;
location / {
index index.html;
}
}
这一步和单机 HTTPS 基本一致,只不过现在它是作为后端 Web 节点存在。
四、全链路加密时 LB 端怎么配置¶
原笔记接着把证书也同步到了 LB 主机:
scp -r ssl_keys/ 192.168.1.21:`pwd`
LB 配置的关键部分如下:
upstream ssl_pools {
server 192.168.1.20:443;
}
server {
listen 80;
server_name ssl.oldboylinux.cn;
rewrite ^(.*)$ https://ssl.harbor-local.cn$1 permanent;
}
server {
listen 443 ssl;
server_name ssl.oldboylinux.cn;
ssl_certificate /etc/nginx/ssl_keys/www.harbor-local.cn.pem;
ssl_certificate_key /etc/nginx/ssl_keys/www.harbor-local.cn.key;
location / {
proxy_pass https://ssl_pools;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这份配置最关键的地方在于:
upstream指向的是后端443proxy_pass用的是https://ssl_pools
也就是说,LB 到 Web 继续走加密通道。
五、什么是“部分加密”¶
原笔记的第二种思路是“部分加密”,可以理解为:
- 用户到 LB:HTTPS
- LB 到 Web:HTTP
这意味着:
- 对外访问仍然是安全的
- 但 LB 和后端 Web 内部链路不一定再加密
这种方案通常更省资源,配置也更简单,但前提是:
- LB 与 Web 之间的网络环境本身可信
六、部分加密时 Web 和 LB 的区别在哪里¶
原笔记中,部分加密的 Web 配置就回到了普通 HTTP 站点:
server {
listen 80;
server_name ssl.harbor-local.cn;
root /app/code/ssl;
error_log /var/log/nginx/ssl-error.log notice;
access_log /var/log/nginx/ssl-access.log main;
location / {
index index.html;
}
}
而 LB 上依然负责对外提供 HTTPS:
listen 443 ssl- 证书仍在 LB 上
- 对外用户访问仍是 HTTPS
从架构上看,区别就在于:
- 全链路加密:LB 到 Web 用
https - 部分加密:LB 到 Web 用普通
http
原笔记在这一节里虽然示例配置复用了前面的结构,但核心思路就是这个分层差异。
七、如何在 LB 上启用 HTTP/2¶
原笔记还补充了一个很实用的点:
- 默认情况下,前端访问通常是 HTTP/1.1
- 如果希望启用 HTTP/2,需要在 LB 的 HTTPS 监听中增加对应标记
示例写法:
listen 443 ssl https;
原笔记说明:
- 不加相关标记时默认还是 1.1
- 开启后可以让前端访问具备 HTTP/2 能力
对实际部署来说,这一步通常仍然发生在最前端 LB 上,因为:
- 客户端是直接连 LB 的
- HTTP/2 协议协商也首先发生在这里
八、抓包能帮助区分哪种架构¶
原笔记在全加密和部分加密两节都建议做访问测试并抓包。
其意义就在于:
- 可以看到流量是否经过 LB
- 也可以进一步区分 LB 后面的链路是 HTTPS 还是 HTTP
因此,抓包不仅是排障手段,也是理解“全链路加密”和“部分加密”差别的非常直观的方法。
九、小结¶
集群 HTTPS 部署最重要的不是背配置,而是先决定加密边界放在哪里:
- 如果追求端到端加密,可选全链路加密
- 如果更强调内部网络效率,可选部分加密
而前端 LB 通常承担三件事:
- 对外提供证书
- 统一把 HTTP 跳到 HTTPS
- 在需要时开启 HTTP/2
把这三层关系理顺,集群 HTTPS 的配置思路就会清晰很多。