配置高可用集群
🧱 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 MASTER
interface eth0 # 网卡名称,根据实际改
virtual_router_id 51
priority 100 # 主的优先级高
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.1.100 # VIP 地址
}
}
🔷 备节点 /etc/keepalived/keepalived.conf
c复制编辑vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90 # 比主低
advert_int 1
authentication {
auth_type PASS
auth_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 2
weight -20
}
vrrp_instance VI_1 {
...
track_script {
chk_nginx
}
}
check_nginx.sh 内容:
#!/bin/bash
if ! pgrep nginx > /dev/null; then
systemctl 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/2
server_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),强制客户端使用 HTTPS
add_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;
# 所有请求跳转到 HTTPS
return 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,指定压缩的内容类型,设置压缩级别等。
968

被折叠的 条评论
为什么被折叠?



