nginx 使用 Referer 头做反外链

一般的反外链都是用 ngx_http_referer_module 然后用 valid_referers 验证 Referer

不过实际上,valid_referers 不会处理 Referer 为空的情况,同时 https下,可以不带Referer。可以在 head 加 <meta name="referrer" content="no-referrer" /> 或者 <img referrer="no-referrer|origin|unsafe-url" src="{item.src}"/> 绕过反外链机制。

可以用 if 判断 http 头,像是这样就完美了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
set $extLink 1;
if ($http_referer ~* '.*\.szerr.cn/.*' ){
set $extLink 0;
}
if ($http_referer ~* '.*\.google\..*' ){
set $extLink 0;
}
if ($http_referer ~* '.*\.baidu\..*' ){
set $extLink 0;
}
if ($http_referer ~* '.*\.bing\..*' ){
set $extLink 0;
}
if ($extLink) {
return 403;
}

参考文章:https://juejin.cn/post/6844903825124360200

本作品采用 知识共享许可协议 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。