1. 使用HTTPS和http2.0
參考:Nginx配置HTTP2.0_nginx 支持 2.0-CSDN博客
2. 設置嚴格的CORS策略
通過add_header
指令設置CORS頭。
只允許來自https://frontend.yourdomain.com
的請求訪問API
location /api/ {if ($http_origin ~* (https://frontend\.yourdomain\.com)) {add_header 'Access-Control-Allow-Origin' $http_origin;add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';}if ($request_method = 'OPTIONS') {return 204;}proxy_pass http://backend;
}
3. 實現身份驗證
對于JWT認證,后端服務負責生成和驗證令牌,Nginx僅需檢查令牌的存在性。為了實現這一點,可以在Nginx中添加一個自定義的Lua腳本(需要安裝ngx_http_lua_module
)或者直接在Nginx配置中進行簡單的檢查:
location /api/ {set $auth 0;if ($http_authorization ~ "^Bearer (.+)$") {set $auth 1;}if ($auth = 0) {return 401 "Missing or invalid Authorization header";}proxy_pass http://backend;
}
4. 限制IP地址
location /api/secure {allow 192.168.1.0/24; # 允許的子網deny all; # 拒絕其他所有proxy_pass http://backend;
}
5. 使用限流
防止濫用或DDoS攻擊,使用limit_req
模塊來限制請求速率
http {limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {location /api/ {limit_req zone=one burst=5 nodelay;proxy_pass http://backend;}}
}
6. 實施WAF(Web應用防火墻)
安裝ModSecurity并在Nginx中啟用它:
# 安裝ModSecurity
sudo apt-get install libmodsecurity3 modsecurity-crs# 啟用ModSecurity
sudo nano /etc/nginx/modsec/modsecurity.conf-recommended
編輯/etc/nginx/sites-available/yourdomain
,添加以下行以加載ModSecurity:
load_module modules/ngx_http_modsecurity_module.so;server {...modsecurity on;modsecurity_rules_file /etc/nginx/modsec/main.conf;...
}
創建或編輯規則文件/etc/nginx/modsec/main.conf
以包含OWASP Core Rule Set或其他自定義規則。
7. 日志記錄和監控
確保啟用了適當的日志級別,并定期審查日志文件。也可以集成第三方監控工具如ELK Stack、Prometheus等。
http {log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;error_log /var/log/nginx/error.log warn;
}
8. 更新和維護
保持系統和軟件包的更新是至關重要的。使用自動化的包管理器如APT(Debian/Ubuntu)或YUM(CentOS/RHEL)來定期更新
# 對于Debian/Ubuntu
sudo apt-get update && sudo apt-get upgrade -y# 對于CentOS/RHEL
sudo yum update -y
同時,可以訂閱安全公告并及時應用補丁,考慮使用自動化工具如Ansible、Puppet或Chef來進行系統管理和配置部署。