ngx_http_referer_module 盗链模块
ngx_http_referer_module模块:用来阻止Referer首部无有效值的请求访问,可防止盗链 valid_referers none|blocked|server_names|string ...; 定义referer首部的合法可用值,不能匹配的将是非法值 none: 请求报文首部没有referer首部,比如用户直接在浏览器输入域名访问web网站,就没有referer信息。 blocked: 请求报文有referer首部,但无有效值,比如为空。 server_names: referer首部中包含本主机名.从Nginx 0.5.33版本开始,server_names中可以使用通配符"*"号。 arbitrary_string: 任意字符串,但可使用*作通配符 regular expression: 被指定的正则表达式模式匹配到的字符串,要使用~开头,例如: ~.*\.magedu\.com HTTP Referer是Header的一部分,当浏览器向Web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理, 例如防止未经允许的网站盗链图片、文件等。因此HTTP Referer头信息是可以通过程序来伪装生成的,所以通过Referer信息防盗链并非100%可靠,但是,它能够限制大部分的盗链情况。 防止盗链生产案例: valid_referers none block server_names *.magedu.com ~\.google\. ~\.baidu\.; if ($invalid_referer) { return 403 "Forbidden Access";} location ~* \.(gif|jpg|png|swf|flv|css|js|flv|swf|jpeg)$ { valid_referers none blocked server_names *.zjol.com.cn *.zzhz.com.cn *.zjtdw.com; 定义合规的引用 if ($invalid_referer) {
return 403; } #拒绝不合规的引用
server { listen 80; server_name refererserver.zjol.com.cn; charset utf-8; location /refererserver{ root /data/nginx/html/; access_log /usr/local/nginx/logs/refererserver.log main;
valid_referers none block server_names *.magedu.com ~\.google\. ~\.baidu\.;
if ($invalid_referer) {
return 403 "Forbidden Access";
}
}
}
server { listen 80; server_name referer.zjol.com.cn; charset utf-8; location /referer { root /data/nginx/html/; index index.html index.htm; access_log /usr/local/nginx/logs/referer.log main; } }
盗用refererserver.zjol.com.cn页面
[root@localhost7B ]#cat referer/index.html
<!DOCTYPE html>
<html lang="zjol-zzhz">
<head>
<meta charset="UTF-8">
<title>盗链页面</title>
</head>
<body>
<a href="http://www.zzhz.com.cn">测试盗链</a>
<img src="http://refererserver.zjol.com.cn/refererserver/sky.jpg">
</body>
</html>
访问测试http://referer.zjol.com.cn/referer/sky.jpg 可以盗链 请求的图片大小
[root@localhost7B conf.d]# tail -f /usr/local/nginx/logs/referer.log
192.168.80.1 - - [18/Jul/2022:16:09:35 +0800] "GET /referer/index.html HTTP/1.1" 200 272 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0" "-"
[root@localhost7B html]# tail -f /usr/local/nginx/logs/refererserver.log
192.168.80.1 - - [18/Jul/2022:16:09:35 +0800] "GET /refererserver/sky.jpg HTTP/1.1" 200 2964 "http://referer.zjol.com.cn/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0" "-"
设置盗链之后访问测试http://referer.zjol.com.cn/referer/sky.jpg 说明 访问记录还是有的。
[root@localhost7B conf.d]# tail -f /usr/local/nginx/logs/referer.log
192.168.80.1 - - [18/Jul/2022:16:39:06 +0800] "GET /referer/index.html HTTP/1.1" 200 272 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36" "-"
[root@localhost7B html]# tail -f /usr/local/nginx/logs/refererserver.log
192.168.80.1 - - [18/Jul/2022:16:35:40 +0800] "GET /refererserver/sky.jpg HTTP/1.1" 403 16 "http://referer.zjol.com.cn/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0" "-"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具