Nginx静态资源安全策略需三方面协同:限制访问来源(Referer校验、路径隐藏)、控制加载行为(严格CSP头)、防止未授权获取(HTTPS重定向、安全响应头、最小权限部署)。

要通过 Nginx 实现静态资源的安全存取策略,核心在于三方面:限制访问来源、控制资源加载行为、防止未授权获取。HTTPS 本身不解决页面内执行风险,所以不能只靠加密,必须叠加主动防御机制。
启用严格的内容安全策略(CSP)
CSP 是 HTTPS 环境下防止 XSS 和恶意资源加载的强制防线。Nginx 通过 add_header 注入响应头,策略需显式声明每类资源的可信来源:
-
默认拒绝一切:
default-src 'none'阻断所有未明确放行的资源加载 -
脚本仅限同源:
script-src 'self',禁用'unsafe-inline'和'unsafe-eval'(除非 UI 框架强依赖且已做代码审计) -
样式允许内联:
style-src 'self' 'unsafe-inline',因多数 CSS 框架依赖<style>标签 -
图片支持 data URI:
img-src 'self' data:,兼容 base64 图标和小图 -
字体与连接限定同源:
font-src 'self'、connect-src 'self',避免泄露 API 调用路径 -
锁定基础 URL 和表单动作:
base-uri 'self'、form-action 'self',防钓鱼劫持
配置示例(放在 location / 块中):
控制访问权限与防盗链
静态资源若被任意引用,可能造成带宽盗用或敏感文件暴露。Nginx 可通过请求头校验和路径约束实现基础访问控制:
-
限制 Referer 来源:使用
valid_referers拒绝非白名单域名的资源请求,例如只允许本站或可信 CDN 域名加载图片 -
隐藏敏感路径:避免将配置文件、备份文件、.git 目录等置于 root 路径下;用
location ~ \.(git|htaccess|log|bak)$返回 404 或 403 -
禁止目录列表:确保
autoindex off(默认即关闭),防止/static/被直接浏览 -
限制 HTTP 方法:对静态资源路径只允许
GET和HEAD,用limit_except GET HEAD { deny all; }
强化传输与缓存安全
即使资源本身安全,传输过程或缓存策略不当也会引入风险:
-
强制 HTTPS 重定向:在 HTTP server 块中用
return 301 https://$host$request_uri;,避免明文传输 -
设置安全响应头:除 CSP 外,补充
X-Content-Type-Options: nosniff、X-Frame-Options: DENY、X-XSS-Protection: 1; mode=block -
谨慎配置缓存时间:对 HTML 文件设短缓存(如
expires 1h;),对带哈希指纹的 JS/CSS 设长缓存(如expires 1y;),避免用户加载过期或被篡改的页面骨架 -
禁用不安全协议与密码套件:在 SSL 配置中关闭 TLSv1.0/TLSv1.1,优先使用
ECDHE-ECDSA-AES256-GCM-SHA384等现代套件
分离资源路径与最小权限部署
结构设计直接影响安全边界:
-
静态资源走独立子域或路径:如
static.example.com或/assets/,便于统一配置策略,也隔离主站 Cookie -
root 目录不跨出站点根:避免
alias或root指向系统目录或用户家目录;建议使用绝对路径且属主为专用 nginx 用户 -
禁用服务端解析能力:确保
.php、.py等后缀在静态 location 中不被 FastCGI 或代理处理,防止上传 Webshell 利用 -
启用 sendfile 但禁用 mmap 风险:配合
tcp_nopush on;提升传输效率,同时避免内存映射导致的潜在信息泄露


















