Apache2防盗链设置方法
导读:Apache2防盗链设置方法 防盗链是通过限制HTTP Referer头部,防止其他网站未经授权使用你服务器上的静态资源(如图片、CSS、JS等)的常见手段。Apache2提供了多种实现方式,以下是具体步骤: 一、前置准备:启用必要模块 无...
Apache2防盗链设置方法
防盗链是通过限制HTTP Referer头部,防止其他网站未经授权使用你服务器上的静态资源(如图片、CSS、JS等)的常见手段。Apache2提供了多种实现方式,以下是具体步骤:
一、前置准备:启用必要模块
无论选择哪种方法,均需确保mod_rewrite
(重写引擎)模块已启用(多数方法依赖此模块)。若未启用,执行以下命令:
sudo a2enmod rewrite # 启用mod_rewrite
sudo systemctl restart apache2 # 重启Apache使模块生效
二、方法一:使用mod_rewrite模块(推荐,灵活且常用)
1. 配置.htaccess文件(适用于共享主机或无主配置文件权限的场景)
- 进入网站根目录(如
/var/www/html
):cd /var/www/html
- 创建或编辑
.htaccess
文件:sudo nano .htaccess
- 添加以下规则(替换
yourdomain.com
为你的真实域名):
规则说明:RewriteEngine On # 启用重写引擎 RewriteCond %{ HTTP_REFERER} !^$ # 允许空Referer(如直接访问图片) RewriteCond %{ HTTP_REFERER} !^http://(www\.)?yourdomain\.com [NC] # 允许自身域名的Referer(不区分大小写) RewriteRule \.(jpg|jpeg|png|gif|css|js)$ - [F,L] # 匹配图片/CSS/JS文件,返回403 Forbidden
RewriteCond %{ HTTP_REFERER} !^$
:允许用户直接输入URL访问资源(此时Referer为空);RewriteCond %{ HTTP_REFERER} !^http://(www\.)?yourdomain\.com [NC]
:允许来自你域名的Referer(包含www
或不带www
);RewriteRule
:若Referer不符合上述条件,拒绝访问并停止后续规则处理。
2. 配置虚拟主机文件(适用于VPS/有主配置文件权限的场景)
- 打开对应的虚拟主机配置文件(如
/etc/apache2/sites-available/yourdomain.com.conf
):sudo nano /etc/apache2/sites-available/yourdomain.com.conf
- 在
< VirtualHost *:80>
块内添加以下内容(与.htaccess
规则类似):< Directory "/var/www/html"> RewriteEngine On RewriteCond %{ HTTP_REFERER} !^$ RewriteCond %{ HTTP_REFERER} !^http://(www\.)?yourdomain\.com [NC] RewriteRule \.(jpg|jpeg|png|gif|css|js)$ - [F,L] < /Directory>
- 保存后重启Apache:
sudo systemctl restart apache2
三、方法二:使用mod_headers模块(设置Referrer Policy,增强安全性)
mod_headers
模块可通过设置Referrer-Policy
头部,控制浏览器发送Referer的行为,间接减少资源被盗链的风险。
1. 启用mod_headers模块
sudo a2enmod headers
sudo systemctl restart apache2
2. 配置Referrer Policy
- 编辑虚拟主机文件(如
/etc/apache2/sites-available/yourdomain.com.conf
):< Directory "/var/www/html"> Header set Referrer-Policy "no-referrer-when-downgrade" # 推荐策略:仅当协议升级(如HTTP→HTTPS)时不发送Referer # 或更严格的策略:"same-origin"(仅同域名下发送Referer) < /Directory>
- 保存后重启Apache:
sudo systemctl restart apache2
注:Referrer-Policy
需配合mod_rewrite
使用(如方法一),才能完全阻止非法Referer访问资源。
四、方法三:使用mod_authz_core模块(基于环境的访问控制,适合精细化管理)
此方法通过设置环境变量,允许特定Referer访问资源,适合需要更灵活控制的场景。
1. 启用mod_authz_core模块
sudo a2enmod authz_core
sudo systemctl restart apache2
2. 配置虚拟主机文件
- 编辑虚拟主机文件(如
/etc/apache2/sites-available/yourdomain.com.conf
):< Directory "/var/www/html"> AuthType Basic # 基本认证(可选,增强安全性) AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd # 认证文件路径(可选) Require valid-user # 要求有效用户(可选) < FilesMatch "\.(jpg|jpeg|png|gif|css|js)$"> Order allow,deny Deny from all Allow from env=allowed_referer # 仅允许环境变量allowed_referer为真的请求 SetEnvIf Referer "^http://(www\.)?yourdomain\.com$" allowed_referer # 设置环境变量 < /FilesMatch> < /Directory>
- 保存后重启Apache:
sudo systemctl restart apache2
注:若不需要认证,可删除AuthType
、AuthName
、AuthUserFile
和Require valid-user
行。
五、测试防盗链效果
- 从你的网站(如
yourdomain.com
)访问图片资源,应能正常显示; - 从其他网站(如
baidu.com
)通过< img src="yourdomain.com/image.jpg">
引用你的图片,应返回403 Forbidden
错误。
六、注意事项
- 替换域名:所有规则中的
yourdomain.com
需替换为你的真实域名(包含www
或不带www
,根据实际情况调整); - 文件类型扩展:根据需要调整
RewriteRule
或FilesMatch
中的文件类型(如添加svg
、webp
等); - 避免误拦截:确保
RewriteCond %{ HTTP_REFERER} !^$
存在,允许用户直接访问资源; - CDN/代理适配:若使用CDN(如Cloudflare),需将规则中的域名替换为CDN的域名,并在CDN设置中允许Referer传递;
- 性能影响:
mod_rewrite
规则会增加服务器处理负担,建议在高流量网站上优化规则(如合并条件)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Apache2防盗链设置方法
本文地址: https://pptw.com/jishu/723076.html