Apache2防盗链设置方法
防盗链是通过限制HTTP Referer头部,防止其他网站未经授权使用你服务器上的静态资源(如图片、CSS、JS等)的常见手段。Apache2提供了多种实现方式,以下是具体步骤:
无论选择哪种方法,均需确保mod_rewrite(重写引擎)模块已启用(多数方法依赖此模块)。若未启用,执行以下命令:
sudo a2enmod rewrite # 启用mod_rewrite
sudo systemctl restart apache2 # 重启Apache使模块生效
/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不符合上述条件,拒绝访问并停止后续规则处理。/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>
sudo systemctl restart apache2
mod_headers模块可通过设置Referrer-Policy头部,控制浏览器发送Referer的行为,间接减少资源被盗链的风险。
sudo a2enmod headers
sudo systemctl restart apache2
/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>
sudo systemctl restart apache2
注:Referrer-Policy需配合mod_rewrite使用(如方法一),才能完全阻止非法Referer访问资源。
此方法通过设置环境变量,允许特定Referer访问资源,适合需要更灵活控制的场景。
sudo a2enmod authz_core
sudo systemctl restart apache2
/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>
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} !^$存在,允许用户直接访问资源;mod_rewrite规则会增加服务器处理负担,建议在高流量网站上优化规则(如合并条件)。