更新时间:2026-05-21 09:46点击:50
### 一、Apache防盗链简介
此功能是为了防止其他网站盗用我们网站里的一些文件,如图片链接。这样会造成用户访问他们的网站实际上图片请求是我们的服务器处理的,造成我们服务器的带宽、资源的浪费。
一般小网站会使用盗链,这样可以减少自己服务器的负载。
1、编辑主配置文件
vim /usr/local/apache2/conf/httpd.conf
153 LoadModule rewrite_module modules/mod_rewrite.so #去掉该行注释启用模块
478 Include conf/extra/httpd-vhosts.conf #去掉该行注释启用虚拟主机配置文件
2、编辑虚拟主机配置文件
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/www/tz"
ServerName www.tzlinux.com
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !tz.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !www.tz.com/.*$ [NC]
RewriteRule.*.(gif|jpg|swf)$http://www.tz.com/about/picpath.png [R,NC,L]
</VirtualHost>
配置说明:
RewriteEngine On #启用rewrite模块
RewriteCond %{HTTP_REFERER} !^$ #%{HTTP_REFERER} 服务器变量,告诉服务器我是从哪个页面链接过来的。
#!^$允许为空的HTTP_REFERER访问,即允许用户在浏览器地址栏中直接输入图片地址访问,不是从其他页面链接点击访问过来的。
RewriteCond %{HTTP_REFERER} !tz.com/.*$ [NC] #设置允许访问的HTTP来源,即网站自身
RewriteCond %{HTTP_REFERER} !www.tz.com/.*$ [NC] #设置允许访问的HTTP来源,即网站自身
RewriteRule.*.(gif|jpg|swf)$http://www.tz.com/about/403.jpg [R,NC,L]
#定义被盗链时替代的图片,即所有引用本网站的gif、jpg、swf文件都会显示为403.jpg图片
#如果不设置图片,可使用RewriteRule.*.(gif|jpg|png)$ - [F],该语句会显示403禁止访问。
[NC] #指的是不区分大小写
[R] #强制重定向
[L] #表示如果匹配的是本条规则,那么就忽略之后的所有规则。
3、配置效果
我的虚拟主机配置文件如下
访问效果如下
可以看到这里的HTTP_REFERER换为其他网站域名即显示403错误。
这个方法可以通过阻止爬虫抓取你的网站来节省你的带宽流量。
在虚拟主机配置文件中添加
<VirtualHost *:80>
DocumentRoot "/www/tz"
ServerName www.tz.com
SetEnvIfNoCase Referer "^$" local_ref #允许直接使用浏览器访问
SetEnvIfNoCase Referer "www.tz.com/.*$" local_ref #允许从www.tz.com/过来的访问请求
SetEnvIfNoCase Referer "tz.com/.*$" local_ref
<filesmatch ".(mp3|mp4|zip|rar|jpg|gif)">
Require all denied #拒绝所有链接请求
Require env local_ref #只允许命名为local_ref的链接请求
</filesmatch>
</VirtualHost>
《Linux系统运维指南》书中的配置方法,未测试

Apache Rewrite 模块是服务器管理中强大的工具,尤其在防盗链场景下,通过灵活的规则配置可有效保护网站资源被恶意盗用,以下从基础原理到实际案例,详细解析三类常见的 Apache Rewrite 防盗链实现方式,涵盖图片、视频及动态资源等不同类型,并附关键配置说明与注意事项。
图片资源是网站被盗链的重灾区,因其加载需明确来源地址,通过 Referer 校验可有效限制非授权访问。
HTTP 请求头中的 Referer 字段记录了请求来源页面,服务器可通过判断 Referer 是否为授权域名,拦截非法请求,需注意,Referer 可被客户端伪造,因此需结合其他手段(如 Token 验证)提升安全性。
RewriteEngine On
# 允许的授权域名(多个域名用 | 分隔,需转义 . 为 .)
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?alloweddomain.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?alloweddomain2.org [NC]
# 拦截非法请求并返回自定义图片或 403 错误
RewriteRule .(jpg|jpeg|png|gif|bmp)$ /error/403_forbidden.gif [NC,L] RewriteCond:匹配条件,!^$ 表示 Referer 不为空(允许浏览器直接访问图片),!^http(s)?://... 表示非授权域名。[NC]:不区分大小写,兼容不同格式的域名。[L]:最后一条规则,匹配后不再执行后续规则。.(jpg|...):匹配常见图片格式,可根据需求扩展。适用于博客图片、产品展示图等静态资源,需定期更新授权域名列表,避免因业务变更导致合法访问被拦截。
对于视频、音频等大流量动态资源,仅靠 Referer 校验安全性不足,需结合 Token 机制实现更严格的访问控制。
通过生成含有时效性和签名信息的 Token,将 Token 作为 URL 参数嵌入资源链接,服务器验证 Token 的有效性和合法性,仅允许携带有效 Token 的请求访问资源。
RewriteEngine On
# 提取 URL 中的 token 参数
RewriteCond %{QUERY_STRING} ^token=([a-zA-Z0-9]+)$ [NC]
# 验证 Token 是否有效(此处需结合后端逻辑,示例为伪代码)
RewriteCond %{QUERY_STRING} !^token=[a-zA-Z0-9]+&expires=d+$ [NC]
RewriteRule ^videos/.*.mp4$ - [F]
# 允许携带有效 Token 的请求访问
RewriteCond %{QUERY_STRING} ^token=[a-zA-Z0-9]+&expires=d+$
RewriteCond %{TIME} >%{QUERY_STRING:expires} [NC]
RewriteRule ^videos/.*.mp4$ - [F] token=abc123&expires=1672531200。http://example.com/videos/sample.mp4?token=abc123&expires=1672531200。在线教育视频、会员专享内容等高价值动态资源,可有效防止直接下载和盗链。
对于核心 API 接口,需限制仅允许特定 IP 地址(如合作方服务器、内部系统)访问,避免接口滥用和数据泄露。
通过 RewriteCond 匹配客户端 IP 地址,若不在预设白名单内,则直接拒绝请求,需结合 mod_rewrite 和 mod_authz_host 模块实现。
RewriteEngine On
# 定义允许的 IP 白名单(单个或网段)
RewriteCond %{REMOTE_ADDR} !^192.168.1.100$
RewriteCond %{REMOTE_ADDR} !^10.0.0.0/24$
RewriteCond %{REMOTE_ADDR} !^172.16..*$
# 拦截非白名单 IP 对 API 的访问
RewriteRule ^api/v1/.*$ - [F] %{REMOTE_ADDR}:获取客户端 IP 地址。!^192.168.1.100$:精确匹配单个 IP, 表示取反。!^10.0.0.0/24$:匹配网段,拒绝该网段外所有 IP。[F]:强制返回 403 Forbidden 错误。支付接口、数据查询接口等核心业务接口,需严格限制访问来源,防止恶意调用。
| 方案类型 | 核心机制 | 优点 | 缺点 | 适用资源 |
|---|---|---|---|---|
| Referer 校验 | HTTP 请求头来源验证 | 配置简单,兼容性强 | 可被伪造,无法阻止直接下载 | 静态图片、CSS/JS 文件 |
| Token 验证 | 动态签名+时效性控制 | 安全性高,可精确控制访问权限 | 需后端支持,增加开发复杂度 | 视频、音频、会员资源 |
| IP 白名单 | 客户端地址限制 | 严格限制访问来源,无法伪造 | 维护成本高,灵活性不足 | 核心 API、管理后台接口 |
Apache Rewrite 防盗链需根据资源类型和安全需求选择合适方案:静态资源优先 Referer 校验,动态资源推荐 Token 验证,核心接口则建议 IP 白名单,实际部署中,需结合日志监控定期优化规则,避免误拦截合法请求,同时注意 HTTPS 环境下 Referer 的传递问题(部分浏览器可能不发送 HTTPS 到 HTTP 的 Referer),通过多维度防护,可有效提升网站资源安全性,降低服务器带宽压力。