配置高可用集群
🧱 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,指定壓縮的內容類型,設置壓縮級別等。