Nginx 配置安全加固后网站打不开怎么办?

Mr.东芳 阅读 10

我按照网上教程给 Nginx 做了安全加固,加了一些 header 和限制,结果一 reload 服务,前端页面就完全打不开了,浏览器报 502 或空白。我只改了 server 块里的配置,没动其他地方。

比如加了这些:

add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header Content-Security-Policy "default-src 'self';";

是不是 CSP 策略太严格把静态资源拦了?但控制台也没看到具体报错,有点懵,该怎么排查?

我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
小利娇
小利娇 Lv1
啊,这个我熟,刚踩过类似的坑。CSP策略确实很容易搞挂页面,尤其是当你的前端用了CDN或者一些第三方资源的时候。

先别慌,按这个顺序排查:
1. 临时先把CSP那行注释掉,reload看页面能不能恢复,确认是不是它的问题
2. 打开浏览器开发者工具,看Network面板,应该能看到被拦截的资源(虽然你说是空白,但可能有隐藏的报错)
3. 如果确认是CSP问题,可以先用这个宽松点的策略测试:
add_header Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval' data: blob: *.yourcdn.com";


几个注意点:
- 加了unsafe-inline和unsafe-eval是为了兼容老式前端框架(虽然不太安全但能临时解决问题)
- 记得把yourcdn.com换成你实际用的CDN域名
- 静态资源如果是跨域的,必须显式声明域名

更好的写法是逐步收紧策略:先允许所有来源让页面能跑起来,然后根据浏览器控制台的报错一个个添加白名单。我上次搞这个调了整整两天,咖啡都喝吐了...

另外502可能是其他原因,检查下nginx error log,路径一般是/var/log/nginx/error.log,看有没有语法错误或者权限问题。
点赞
2026-03-07 16:11