安全加固
约 695 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › Nginx › 运维与安全(在新窗口打开) › 安全加固
隐藏版本号
http {
# 去掉响应头中的 Nginx 版本号
server_tokens off;
}server_tokens off 后响应头变为 Server: nginx(不再显示版本号),增加攻击者扫描特定版本漏洞的难度。
限制请求体大小
http {
# 全局限制
client_max_body_size 10m;
server {
# 上传接口单独放开
location /upload/ {
client_max_body_size 100m;
}
}
}限制请求方法和类型
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 405;
}或限制仅特定方法访问:
location /api/ {
limit_except GET POST {
deny all;
}
proxy_pass http://backend;
}设置安全头
server {
listen 443 ssl;
# HTTPS 强制(HSTS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
# 禁止 MIME 类型嗅探
add_header X-Content-Type-Options nosniff always;
# 防止点击劫持
add_header X-Frame-Options SAMEORIGIN always;
# XSS 保护
add_header X-XSS-Protection "1; mode=block" always;
# 引用来源策略
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# 内容安全策略(严格时)
# add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline';" always;
# 权限策略
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
}禁用不安全方法
location / {
# 只允许 GET、HEAD、POST
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 405;
}
}限制并发与速率
http {
# 按 IP 限流
limit_req_zone $binary_remote_addr zone=security:10m rate=5r/s;
limit_conn_zone $binary_remote_addr zone=conn:10m;
server {
location / {
limit_req zone=security burst=10 nodelay;
limit_conn conn 20;
limit_req_status 429;
limit_conn_status 503;
}
# 登录接口更严格
location /login {
limit_req zone=security burst=3 nodelay;
}
}
}目录保护
# 禁止访问隐藏文件(以点开头的文件)
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
# 禁止访问敏感文件
location ~* (\.(bak|conf|config|db|ini|key|log|sql|swp|tar|gz|zip))$ {
deny all;
}
# 保护配置文件
location = /nginx.conf {
deny all;
}缓冲区溢出保护
http {
# 请求缓冲区
client_body_buffer_size 128k;
client_header_buffer_size 1k;
large_client_header_buffers 4 8k;
# 输出缓冲区
output_buffers 8 32k;
postpone_output 1460;
}SSL/TLS 加固
server {
listen 443 ssl http2;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
# 仅启用安全协议
ssl_protocols TLSv1.2 TLSv1.3;
# 推荐的安全密码套件
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
# 会话缓存
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
}屏蔽恶意 User-Agent
# map 定义黑名单 User-Agent
map $http_user_agent $bad_bot {
default 0;
~*(curl|wget|python-requests|scrapy|httpclient) 1;
}
server {
if ($bad_bot) {
return 403;
}
}安全配置检查清单
# 1. 测试配置
sudo nginx -t
# 2. 检查安全头
curl -I https://example.com
# 3. SSL 测试
# https://www.ssllabs.com/ssltest/
testssl.sh https://example.com
# 4. 查看暴露的信息
curl -I https://example.com | grep Server小结
server_tokens off隐藏 Nginx 版本号。- 安全头(HSTS、X-Frame-Options、X-Content-Type-Options 等)防止常见 Web 攻击。
limit_req和limit_conn防止滥用和 DDoS。- 禁止访问隐藏文件(
/\.)和敏感扩展名(.bak、.sql等)。 - SSL 加固:TLSv1.2+、安全密码套件、OCSP Stapling。
client_max_body_size限制请求体大小。
