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来进行系统管理和配置部署。