在CentOS上,Apache通常通过“防盗链”来阻止外部站点直接引用你的静态资源(如图片、视频、压缩包),从而减少带宽盗用与内容被非法嵌入的风险。以下给出可落地的配置方法与注意事项。


一、工作原理与适用范围

利用HTTP请求头中的Referer字段判断访问来源;对不在白名单的来源返回403Forbidden或重定向到占位图/提示页,从而阻断外链。适用于图片、音视频、文档等静态资源的直链滥用防护。该方法属于“访问控制”而非数字版权保护(DRM),无法阻止用户下载后再次传播。


二、方法一基于目录的Rewrite规则(推荐)

适用场景:对整站或指定目录生效,集中管理、性能更好。

启用模块(若未启用):

检查:apachectl-M|greprewrite

启用(模块名可能为rewrite_module):编辑/etc/httpd/conf.modules.d/*.conf,确保有LoadModulerewrite_modulemodules/mod_rewrite.so

配置示例(在对应VirtualHost或Directory中):

OptionsIndexesFollowSymLinksAllowOverrideNoneRequireallgrantedRewriteEngineOn#白名单:本站域名、空Referer(直接访问/浏览器下载)、可信合作方RewriteCond%{HTTP_REFERER}!^https?://(www\.)?yourdomain\.com[NC]RewriteCond%{HTTP_REFERER}!^https?://(www\.)?partner\.com[NC]RewriteCond%{HTTP_REFERER}!^$#对常见静态资源生效RewriteRule\.(jpg|jpeg|png|gif|bmp|webp|svg|mp4|mp3|zip|rar|pdf)$-[F,L]

说明:

[NC]忽略大小写;[F]返回403;[L]为最后一条规则。

将**/var/www/html/protected**替换为你的实际目录;按需增减资源后缀。


三、方法二使用SetEnvIfNoCase与FilesMatch

适用场景:更细粒度地按文件类型或目录控制,逻辑清晰。

配置示例:

OptionsIndexesFollowSymLinksAllowOverrideNoneRequireallgranted#定义白名单RefererSetEnvIfNoCaseReferer"^https?://(www\.)?yourdomain\.com"local_refSetEnvIfNoCaseReferer"^https?://(www\.)?partner\.com"local_refSetEnvIfNoCaseReferer"^$"local_ref#对指定后缀文件应用访问控制OrderAllow,DenyAllowfromenv=local_refDenyfromall

说明:

白名单支持多个域名;^$用于放行空Referer(常见于直接访问或客户端下载)。

若你的Apache为2.4+,也可结合Requireallgranted/denied与条件表达式实现同等效果。


四、方法三使用.htaccess(仅当AllowOverride允许)

在站点根目录或资源目录创建/编辑**.htaccess**:

RewriteEngineOnRewriteCond%{HTTP_REFERER}!^https?://(www\.)?yourdomain\.com[NC]RewriteCond%{HTTP_REFERER}!^https?://(www\.)?partner\.com[NC]RewriteCond%{HTTP_REFERER}!^$RewriteRule\.(jpg|jpeg|png|gif|bmp|webp|svg|mp4|mp3|zip|rar|pdf)$-[F,L]

前提:对应目录的AllowOverride需为All或包含FileInfo;否则规则不会生效。

修改后建议先执行:apachectlconfigtest检查语法,再重启服务。


五、验证与注意事项

验证步骤:

重启Apache:systemctlrestarthttpd

使用另一站点页面嵌入你的资源或通过curl指定Referer测试:

curl-I-H“Referer:http://evil.com”https://www.ksu5.com/uploadfile/allimg/2025/11/30/test.jpg

预期返回:HTTP/1.1403Forbidden

浏览器测试请清理缓存或使用隐身模式,避免命中旧资源。

重要注意事项:

Referer可被客户端伪造或缺失(如移动端App、空Referer下载器),因此该方案是“尽力而为”的访问控制,并非绝对防护。

对搜索引擎爬虫、站内页面、CDN回源等来源要加入白名单,避免误杀。

若资源需对外“预览+防直链”,可改为签名URL或临时令牌方案(应用层实现),与Referer策略组合使用更稳妥。