边缘代理作为客户端请求的第一道防线,需要特别加强安全防护:
# 禁用不必要的HTTP方法
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
}
# 隐藏Nginx版本信息
server_tokens off;
# 防止点击劫持
add_header X-Frame-Options "SAMEORIGIN";
# 启用XSS防护
add_header X-XSS-Protection "1; mode=block";
# 禁用内容类型嗅探
add_header X-Content-Type-Options "nosniff";
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
# 限制连接数
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn perip 10;
# 限制请求速率
limit_req_zone $binary_remote_addr zone=ratelimit:10m rate=10r/s;
server {
location / {
limit_req zone=ratelimit burst=20 nodelay;
}
}
在分布式多点访问架构中,确保各节点间的安全通信至关重要:
# 使用客户端证书认证
server {
listen 443 ssl;
ssl_client_certificate /path/to/ca.crt;
ssl_verify_client on;
location / {
if ($ssl_client_verify != SUCCESS) {
return 403;
}
proxy_pass http://backend;
}
}
location / {
allow 192.168.1.0/24;
allow 10.0.0.0/8;
deny all;
proxy_pass http://backend;
}
location / {
proxy_pass http://backend;
# 移除敏感头信息
proxy_hide_header X-Powered-By;
proxy_hide_header Server;
# 设置安全头
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header Content-Security-Policy "default-src 'self'";
}
geo $blocked_country {
default 0;
CN 1;
RU 1;
}
server {
if ($blocked_country) {
return 403;
}
}
location / {
# ModSecurity集成
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
proxy_pass http://backend;
}
map $remote_addr $blocked_ip {
default 0;
include /etc/nginx/blocked_ips.conf;
}
server {
if ($blocked_ip) {
return 403;
}
}
log_format security '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time '
'$http_x_forwarded_for $ssl_cipher $ssl_protocol';
access_log /var/log/nginx/security.log security;
通过以上配置和策略,可以显著提升Nginx反向代理在边缘代理和多点访问场景下的安全性。