为 Laravel 项目配置 Nginx 安全响应头,需在 server 块中添加三行 add_header 指令:X-Frame-Options "SAMEORIGIN"、X-XSS-Protection "1; mode=block"、X-Content-Type-Options "nosniff",并确保置于 server 作用域内;同时屏蔽 .env 等敏感文件及目录,启用 HSTS 强制 HTTPS。

为 Laravel 项目配置 Nginx 安全响应头,能有效防御点击劫持、MIME 类型混淆、XSS 注入等常见 Web 攻击,避免因缺失关键头字段导致浏览器降级防护或安全审计不通过。
添加基础安全响应头
在 server 块内直接添加三行 add_header 指令:
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
这三行必须写在 server {} 作用域下,不能放在 location 内——否则子路径请求可能丢失这些头。X-Frame-Options 防止你的页面被嵌入到他人 iframe 中;X-XSS-Protection 是旧版 IE/Edge 的 XSS 过滤开关,mode=block 表示检测到攻击时直接阻断渲染;X-Content-Type-Options 禁用浏览器 MIME 类型嗅探,防止 .txt 文件被误解析为 HTML 执行脚本。
禁用危险文件访问
方法一:屏蔽点开头的敏感文件
location ~ /\.(env|git|htaccess|ini|log|sh|bak|swp|yml|yaml|php~)$ {
deny all;
}
这一段要放在所有 location / 和 location ~ \.php$ 之前,否则请求可能先被 PHP 处理再拒绝,造成 .env 泄露风险。【.env 必须拦截,否则数据库密码明文暴露】
方法二:屏蔽整个敏感目录(推荐)
location ~ ^/(app|bootstrap|config|database|public/storage|resources|routes|storage|tests|vendor)/ {
deny all;
}
注意 public/storage 是符号链接,若实际指向 storage/app,此规则可防止绕过 public 目录直接读取原始存储内容。
启用 HSTS 强制 HTTPS
第一步:确认你已配置 HTTPS server 块(listen 443 ssl)且证书有效
第二步:在该 HTTPS server 块中加入
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
max-age=31536000 表示一年内强制走 HTTPS;includeSubDomains 让所有子域名也生效;preload 表示申请加入浏览器 HSTS 预加载列表——但提交前必须确保主站和所有子域 100% 支持 HTTPS,否则将永久无法访问 HTTP 版本。
第三步:在 HTTP server 块中加 return 301 https://$host$request_uri;
这一步不可省略,否则用户首次用 http 访问仍会走非加密通道,HSTS 头根本不会下发。


















