nginx中配置referrer-policy需用add_header指令并加always参数,策略值依业务选strict-origin-when-cross-origin(常用)、same-origin(内网)、origin(高隐私)或no-referrer(慎用),且须在对应location块中精准设置。

在 Nginx 中配置 Referrer-Policy,核心是通过 add_header 指令设置响应头,控制浏览器在跳转时是否发送、以及发送多少来源 URL 信息。关键不在“加不加”,而在于选对策略值——配错可能让支付回调失败、SSO 登录中断、甚至埋点统计归零。
明确策略值再动手
不同策略影响范围差异很大,不能一概套用 strict-origin-when-cross-origin:
-
strict-origin-when-cross-origin:最常用平衡方案。同源发完整 URL;跨域 HTTPS→HTTPS 只发源(
https://a.com);HTTPS→HTTP 则不发。适合大多数前后端分离、含第三方跳转的业务。 - same-origin:仅同源发送完整 URL,跨域一律不发。适合内网管理后台、高度敏感系统,但会断掉所有跨域统计和广告回传。
-
origin:无论同源跨域、协议如何,都只发源(不含路径和参数)。比
strict-origin-when-cross-origin更保守,适合对隐私要求极高的政务或金融类站点。 - no-referrer:彻底禁用 Referer,所有请求都不带该头。慎用——可能导致微信/支付宝支付异步通知验签失败、部分 CDN 缓存失效、A/B 测试平台无法识别来源。
写入位置要准确
Referrer-Policy 必须出现在返回 HTML、JS、CSS 等前端资源的响应中,不是只配在 server 块顶层就万事大吉:
- 若网站主站和静态资源(如
/static/、/assets/)共用同一 server 块,直接在server{}内添加即可; - 若静态资源由独立 location 处理(例如
location ~* \.(js|css|png)$),需在该 location 内单独加add_header,否则这些文件响应里不生效; - API 接口(如
/api/)通常不需要 Referrer-Policy,可不配置,避免干扰 CORS 预检或客户端逻辑。
必须加 always 参数
Nginx 默认只对 2xx 和 3xx 响应添加 header,而 404、500 等错误页也应保护 Referer 信息。漏掉 always 会导致错误响应泄露原始页面路径:
错误写法:add_header Referrer-Policy "strict-origin-when-cross-origin";
正确写法:add_header Referrer-Policy "strict-origin-when-cross-origin" always;
验证是否生效
配置后别急着重启完事,务必实测:
- 打开浏览器开发者工具 → Network → 点开任意 HTML 或 JS 请求 → 查看 Response Headers 是否包含
Referrer-Policy; - 在页面中放一个跳往外部网站(如
https://httpbin.org/headers)的链接,点击后检查目标站收到的 Referer 值是否符合预期; - 用 curl 模拟跨域请求:
curl -I -H "Origin: https://other.com" https://yoursite.com/index.html,观察响应头。











