nginx实现https负载均衡的核心是ssl终止与流量分发一体化:监听443端口解密https,再以http/https转发至upstream后端;需配置证书、tls 1.2+、http/2、安全套件、hsts,并通过proxy_pass透传请求头与真实ip。

直接用 Nginx 实现 HTTPS 负载均衡,核心是把 TLS 终止和流量分发两件事合在一起做:Nginx 先解密 HTTPS 请求,再以 HTTP(或 HTTPS)方式转发给后端服务器。整个过程不依赖额外网关,配置清晰、可控性强。
配置 HTTPS 入口并启用强加密
在 server 块中监听 443 端口,加载证书,并强制使用安全协议:
- 写明
listen 443 ssl http2;,开启 HTTP/2 提升性能 - 指定证书路径:
ssl_certificate /path/to/fullchain.pem;和ssl_certificate_key /path/to/privkey.pem; - 只允许 TLS 1.2 及以上:
ssl_protocols TLSv1.2 TLSv1.3; - 禁用弱加密套件,推荐使用前向保密组合:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; - 加 HSTS 头防降级:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
定义后端服务组(upstream)
在 http 块内声明一组后端服务器,支持多种调度策略:
- 轮询(默认):
upstream backend { server 192.168.1.10:8080; server 192.168.1.11:8080; } - 加权轮询(适配不同性能):
server 192.168.1.10:8080 weight=3; server 192.168.1.11:8080 weight=1; - 会话保持(如需登录态绑定):
ip_hash;放在 upstream 内首行 - 健康检查增强可用性:
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
反向代理与请求头控制
在 server 的 location 中调用 upstream,并规范透传字段:
- 用
proxy_pass http://backend;转发到 upstream 名称 - 重设 Host 头为后端可识别的值:
proxy_set_header Host $host;(避免硬编码) - 传递真实客户端 IP:
proxy_set_header X-Real-IP $remote_addr;,必要时加X-Forwarded-For - 隐藏 Nginx 版本信息:
server_tokens off;(放在 http 或 server 级) - 限制请求方法,禁用危险动词:
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|PATCH)$) { return 405; }
安全加固与可观测性
合规和运维离不开细节控制:
- 设请求体上限防攻击:
client_max_body_size 10m; - 设超时防止慢速连接:
proxy_connect_timeout 5s; proxy_send_timeout 30s; proxy_read_timeout 30s; - 记录关键日志字段:
$remote_addr $time_local "$request" $status $upstream_addr $upstream_response_time - 定期轮转日志,避免单文件过大;敏感操作建议单独审计











