核心是按站定制、隔离配置、最小暴露:每个server块独立配置安全头并加always参数,https与hsts须按站点实际部署启用,禁用非必要http方法、隐藏版本号、限制上传大小、禁止敏感路径访问,并以低权限用户运行进程。

加固 Nginx 虚拟主机,核心是「按站定制、隔离配置、最小暴露」。不能把安全头写在 http 块里统一继承,也不能让多个域名共用一套 CSP 或 HSTS 策略——否则容易引发跨域拦截、子站锁死、CSP 违规报错等问题。
每个 server 块独立配安全响应头
所有关键安全头必须显式写在对应域名的 server 块内,加 always 参数确保对 3xx/4xx/5xx 响应也生效:
add_header X-Content-Type-Options "nosniff" always;-
add_header X-Frame-Options "DENY" always;(主站可用SAMEORIGIN,管理后台建议DENY) add_header X-XSS-Protection "1; mode=block" always;add_header Referrer-Policy "no-referrer-when-downgrade" always;
按站点启用 HTTPS 和 HSTS
HSTS 具有强绑定性和传染性,必须严格按实际部署情况启用:
- 主站
example.com启用includeSubDomains,就不要在blog.example.com的server块里再重复加 HSTS 头 - 若子站使用独立证书或 CDN 接入(如
api.example.com),需单独验证其 HTTPS 可用性后再启用 - 上线前先用短有效期测试:
max-age=300,确认无混合内容、跳转循环、证书错误等问题,再逐步延长
限制请求行为与隐藏敏感信息
在每个 server 块中做细粒度控制,避免全局一刀切:
- 禁用非必要 HTTP 方法:
if ($request_method !~ ^(GET|HEAD|POST)$) { return 405; } - 限制上传大小:
client_max_body_size 10m;(根据业务调整,如 CMS 可设为 50m) - 禁止访问敏感路径:
location ~*\.(bak|conf|sql|log|env|htaccess)$ { deny all; return 404; } - 隐藏版本号:
server_tokens off;(放在该server块内,不影响其他虚拟主机)
权限与运行环境隔离
虚拟主机之间不仅配置要隔离,运行时权限也要分离:
- 确保 Nginx worker 进程以低权限用户运行(如
nginx或www-data),且该用户无登录权限:useradd -r -s /sbin/nologin nginx - 各站点根目录归属不同用户或组(如
chown -R app1:nginx /var/www/app1),并设为750权限 - 配置文件仅允许 root 和 nginx 组读取:
chmod 640 /etc/nginx/conf.d/*.conf











