以下是Nginx反向代理的最佳設置方案,涵蓋基礎配置、性能優化及安全增強:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server; # 后端服務器地址
proxy_set_header Host $host; # 傳遞原始域名
proxy_set_header X-Real-IP $remote_addr; # 傳遞客戶端真實IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 記錄請求鏈路IP
}
}
關鍵參數說明:
proxy_pass:指向后端服務地址,支持HTTP/HTTPS協議。proxy_set_header:確保后端獲取正確請求頭,如Host用于虛擬主機識別。upstream backend {
least_conn; # 按連接數最少分配(推薦高并發場景)
server 192.168.1.1:8080 weight=3; # 權重3,處理更多請求
server 192.168.1.2:8080;
server 192.168.1.3:8080 backup; # 備用服務器,主服務器故障時啟用
proxy_next_upstream error timeout http_500; # 故障轉移條件
}
server {
location / {
proxy_pass http://backend;
}
}
負載均衡算法:
round-robin(默認):輪詢分配請求。ip_hash:基于客戶端IP哈希,保證會話保持(如登錄狀態)。proxy_connect_timeout 5s; # 連接后端超時時間
proxy_read_timeout 30s; # 讀取響應超時時間
proxy_send_timeout 30s; # 發送請求超時時間
client_max_body_size 100m; # 允許最大請求體大?。ㄈ缥募蟼鳎?/span>
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g;
location /static/ {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m; # 緩存200/302狀態碼10分鐘
proxy_cache_valid 404 1m; # 緩存404狀態碼1分鐘
}
gzip on;
gzip_types text/css application/javascript;
gzip_min_length 1024; # 僅壓縮大于1KB的響應
# 限制請求方法(僅允許GET/POST)
location /api/ {
if ($request_method !~ ^(GET|POST)$) {
return 405;
}
}
# 防止SQL注入/XSS(簡單示例,建議結合WAF)
if ($query_string ~* "union|select|drop") {
return 403;
}
server_tokens off; # 關閉版本號顯示
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256;
}
location /ws/ {
proxy_pass http://backend_websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
proxy_pass指向IP代理接口,并啟用IP輪換:location / {
proxy_pass http://gateway.ipipgo.io:10808;
proxy_set_header X-Real-IP $remote_addr;
# 啟用IP心跳檢測(需服務商支持)
proxy_next_upstream error timeout;
}
sudo nginx -t # 測試配置是否正確
sudo systemctl reload nginx # 重新加載配置
tail -f /var/log/nginx/access.logcurl驗證代理效果:curl -x http://localhost:80 http://example.comleast_conn算法,增加worker_connections和proxy_buffers。參考來源: