配置高可用集群
🧱 Nginx 高可用架构图(主流方案)
⬇️客户端请求┌───────────────┐│ Virtual IP │ ← Keepalived 提供高可用浮动IP└──────┬────────┘│┌──────────┴──────────┐│ │
┌──▼───┐ ┌───▼───┐
│Nginx主│ │Nginx备│ ← 两台Nginx组成主备
└──┬───┘ └───┬───┘│ │▼ ▼
多个后端应用服务器,如 Tomcat、SpringBoot、Node、PHP 等
📦 组件列表
组件 | 说明 |
---|---|
Nginx | 做反向代理、负载均衡 |
Keepalived | 提供 高可用虚拟 IP(VIP),主备切换 |
后端服务池 | 实际处理业务请求的服务(Tomcat/SpringBoot等) |
🔧 步骤一:部署两台 Nginx + Keepalived
比如:
主机名 | 角色 | IP |
---|---|---|
nginx1 | master | 192.168.1.10 |
nginx2 | backup | 192.168.1.11 |
VIP | 虚拟IP | 192.168.1.100 |
🧰 步骤二:安装 Nginx 和 Keepalived(每台都装)
参考你上面安装的 nginx/keepalived 流程就行。
✍️ 步骤三:配置 Keepalived(主从)
🔷 主节点 /etc/keepalived/keepalived.conf
conf复制编辑vrrp_instance VI_1 {state MASTERinterface eth0 # 网卡名称,根据实际改virtual_router_id 51priority 100 # 主的优先级高advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.1.100 # VIP 地址}
}
🔷 备节点 /etc/keepalived/keepalived.conf
c复制编辑vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 90 # 比主低advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.1.100}
}
🚀 步骤四:配置 Nginx(两台一样)
你只需要配置一个负载均衡策略,监听 VIP 端口:
nginx.conf
示例:
nginx复制编辑http {upstream backend_servers {server 192.168.1.21:8080;server 192.168.1.22:8080;}server {listen 80;server_name localhost;location / {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
}
✅ 步骤五:启动服务并测试
bash复制编辑# 启动 keepalived(每台都启动)
systemctl start keepalived
systemctl enable keepalived# 启动 nginx(每台都启动)
systemctl start nginx
systemctl enable nginx
🧪 测试高可用效果
-
访问
http://192.168.1.100/
应正常跳转到后端服务器。 -
关闭主 Nginx 节点:
bash复制编辑systemctl stop keepalived
-
浮动 IP 会自动漂移到 backup 节点,访问仍正常。
🧠 可选:加入 Nginx 状态检测(高级)
vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2weight -20
}vrrp_instance VI_1 {...track_script {chk_nginx}
}
check_nginx.sh
内容:
#!/bin/bash
if ! pgrep nginx > /dev/null; thensystemctl stop keepalived
fi
https证书配置
https必须配置在nginx的443端口下面
基本配置
ssl_certificate /usr/local/nginx/cert/cert.crt;
ssl_certificate_key /usr/local/nginx/cert/cert.key;
Nginx HTTPS 相关完整配置汇总
nginx复制编辑server {listen 443 ssl http2; # 监听443端口,启用SSL和HTTP/2server_name yourdomain.com www.yourdomain.com;# 证书文件(请用你自己的路径和证书文件替换)ssl_certificate /path/to/fullchain.pem; # 包含完整证书链的证书文件ssl_certificate_key /path/to/privkey.pem; # 私钥文件# TLS协议版本,禁用不安全的旧版本ssl_protocols TLSv1.2 TLSv1.3;# 加密套件(强加密,Mozilla推荐)ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';# 服务器优先使用自己的加密套件顺序,避免弱加密ssl_prefer_server_ciphers on;# SSL会话缓存,提升性能,避免重复握手ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;# 启用 OCSP Stapling(证书状态快速验证)ssl_stapling on;ssl_stapling_verify on;# 解析 OCSP 请求的 DNS 服务器resolver 8.8.8.8 8.8.4.4 valid=300s;resolver_timeout 5s;# HTTP Strict Transport Security (HSTS),强制客户端使用 HTTPSadd_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;# 防止内容被iframe嵌套,减少点击劫持攻击add_header X-Frame-Options SAMEORIGIN;# 防止XSS攻击add_header X-XSS-Protection "1; mode=block";# 禁用内容类型嗅探add_header X-Content-Type-Options nosniff;# 根目录和首页root /var/www/html;index index.html index.htm;location / {try_files $uri $uri/ =404;}# 反向代理示例(根据需求)location /api/ {proxy_pass http://127.0.0.1:8080/;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;}# 日志路径(可根据需要修改)access_log /var/log/nginx/https_access.log;error_log /var/log/nginx/https_error.log;
}# HTTP 端口配置,重定向到 HTTPS
server {listen 80;server_name yourdomain.com www.yourdomain.com;# 所有请求跳转到 HTTPSreturn 301 https://$host$request_uri;
}
配置说明
配置项 | 作用 |
---|---|
listen 443 ssl http2; | 开启 HTTPS 和 HTTP/2 协议 |
ssl_certificate | 指定证书文件,需包含完整证书链(通常是 fullchain.pem ) |
ssl_certificate_key | 指定私钥文件 |
ssl_protocols TLSv1.2 TLSv1.3; | 只允许 TLS1.2 和 TLS1.3,禁用过时协议 |
ssl_ciphers | 允许的加密算法,保证强加密 |
ssl_prefer_server_ciphers on; | 优先使用服务器推荐的加密算法顺序 |
ssl_session_cache | 缓存 SSL 会话,减少握手消耗 |
ssl_session_timeout | 会话缓存有效期 |
ssl_stapling on; | 启用 OCSP Stapling,提高证书状态验证速度 |
ssl_stapling_verify on; | 验证 OCSP 响应 |
resolver | DNS 服务器,用于 OCSP 请求 |
add_header Strict-Transport-Security | HSTS,强制客户端只能访问 HTTPS |
add_header X-Frame-Options SAMEORIGIN; | 防止点击劫持 |
add_header X-XSS-Protection | 启用浏览器 XSS 防护 |
add_header X-Content-Type-Options nosniff; | 防止浏览器内容嗅探 |
root | 指定静态文件目录 |
location /api/ | 反向代理示例,代理 API 请求到后端 |
access_log 和 error_log | 日志文件位置 |
listen 80 + return 301 | HTTP 请求跳转到 HTTPS |
1. 客户端证书验证(双向认证)
双向 TLS 认证,除了服务器验证客户端,客户端也需提供证书,常用于高安全场景。
nginx复制编辑server {listen 443 ssl http2;server_name yourdomain.com;ssl_certificate /path/to/server.crt;ssl_certificate_key /path/to/server.key;ssl_client_certificate /path/to/ca.crt; # 受信任客户端证书的CA证书ssl_verify_client on; # 开启客户端证书验证ssl_verify_depth 2; # 证书链最大深度# 其他ssl配置...location / {# 正常服务配置}
}
- 客户端必须提供受信任CA签发的证书,否则连接被拒绝。
2. 限速限流配置(防攻击)
控制请求速率,防止刷接口、DDOS等攻击。
nginx复制编辑http {# 定义限制区域,1分钟最多10个请求limit_req_zone $binary_remote_addr zone=one:10m rate=10r/m;server {listen 443 ssl;server_name yourdomain.com;# 其他ssl配置...location /api/ {limit_req zone=one burst=20 nodelay;proxy_pass http://127.0.0.1:8080/;# 代理头...}}
}
limit_req_zone
定义速率限制区域。limit_req
在具体路径生效,burst
允许短时突发,nodelay
表示超出限制立即拒绝。
3. 防盗链和 Referer 检查
只允许指定来源访问资源,防止被别的站盗用图片、视频等资源。
nginx复制编辑location /images/ {valid_referers none blocked yourdomain.com *.yourdomain.com;if ($invalid_referer) {return 403;}# 资源配置
}
valid_referers
设定允许的 Referer 来源。$invalid_referer
变量判断是否非法来源。
4. gzip 压缩
减少传输体积,提高响应速度。
nginx复制编辑http {gzip on;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;gzip_min_length 256;gzip_proxied any;gzip_comp_level 5;gzip_vary on;
}
- 开启 gzip,指定压缩的内容类型,设置压缩级别等。