游乐游手机版
首页/编程语言/文章详情

Apache服务器防盗劫持配置教程

时间:2026-07-24 06:12
在Apache中配置防盗链的常用方法包括:mod_rewrite模块基于Referer重写规则返回403,mod_headers模块通过响应头限制页面嵌入,以及mod_security第三方模块提供更精细的规则控制。配置时需注意避免误拦空Referer的正常请求,并定期更新规则以适应新场景。

在Apache中配置防盗链(也就是常说的防盗劫持或Hotlink Protection),其实有不少成熟的方案。下面挑几种最常用的方法,从原理到配置一步步拆开来说,相信总有一款适合你的场景。

怎样在Apache中配置防盗劫持

方法一:mod_rewrite模块——最灵活也最常用

这是Apache自带的重写模块,几乎每个运维人员都会用到。先确认它已经启用:

sudo a2enmod rewrite
sudo systemctl restart apache2

接下来,在网站的.htaccess文件(或者Apache的虚拟主机配置)里插入下面这段规则:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^https://(www.)?yourdomain.com [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .(jpg|jpeg|png|gif)$ - [F,L]

简单解释一下这几行在做什么:

  • RewriteEngine On——打开重写引擎。
  • RewriteCond %{HTTP_REFERER} !^https://(www.)?yourdomain.com [NC]——检查请求的来源(Referer),如果不是你的域名就直接进入下一轮判断。
  • RewriteCond %{HTTP_REFERER} !^$——同时排除掉Referer为空的情况(比如用户直接输入图片地址,或者某些浏览器/设备发出的请求)。
  • RewriteRule .(jpg|jpeg|png|gif)$ - [F,L]——如果上面两个条件都满足,就返回403 Forbidden,并且停止后续规则处理。

这样,别人想在自己的网站上直接引用你服务器上的图片,就会看到403错误页面,而不是你的图片。当然,你还可以根据需要扩展文件类型,比如加上webp|svg|ico等。

方法二:mod_headers模块——从响应头层面防守

如果不想用重写规则,或者想配合其他安全策略,可以试试用mod_headers。先启用它:

sudo a2enmod headers
sudo systemctl restart apache2

然后在配置文件中添加类似这样的内容:


RewriteEngine On
RewriteCond %{HTTP_REFERER} !^https://(www.)?yourdomain.com [NC]
RewriteCond %{HTTP_REFERER} !^$
Header set X-Frame-Options "SAMEORIGIN"
Header set Content-Security-Policy "frame-ancestors 'self'"

这里面有两个关键点:

  • Header set X-Frame-Options "SAMEORIGIN"——禁止其他网站通过iframe嵌入你的页面。
  • Header set Content-Security-Policy "frame-ancestors 'self'"——进一步限制,只有同源页面才能嵌套你的资源。

当然,这种方法主要防的是“页面被嵌入”,而不是直接防图片被引用。如果你需要更彻底的防盗链,还是建议和方法一配合使用,或者直接用方法一。

方法三:mod_security第三方模块——适合复杂场景

如果网站安全要求比较高,或者需要更精细的规则控制,可以引入mod_security。安装很简单:

sudo apt-get install libapache2-mod-security2
sudo systemctl restart apache2

然后在/etc/modsecurity/modsecurity.conf或对应的配置文件中添加规则:

SecRule REQUEST_FILENAME ".(jpg|jpeg|png|gif)$" "id:1234567,phase:2,deny,status:403,log,msg:'Hotlinking detected'"

这条规则的意思是:匹配请求的文件名,如果是图片类型,就直接拒绝并返回403,同时记录日志。注意这里的id:1234567需要自定义一个唯一编号,避免冲突。相比前两种方法,mod_security能做的事情更多,比如可以结合IP、请求头、甚至用户袋里来做更复杂的判断,但配置成本也相对高一些。

注意事项

最后说几点容易踩坑的地方:

  • 防盗链规则一定要小心别误伤到正常用户。比如有些搜索引擎爬虫、社交媒体预览抓图工具,它们的Referer可能为空或者是第三方域名。如果误拦截,会影响网站收录和分享效果。所以很多人会留一个空Referer的例外(就是上面规则里的!^$条件)。
  • 配置不是一成不变的。新的攻击手法、新的图片格式、新的CDN架构,都可能要求你定期检查和更新规则。
  • 如果你用的是共享主机,大概率没有权限修改Apache的主配置文件,那只能在.htaccess里做文章。好在上面两种方法(mod_rewrite和mod_headers)都支持.htaccess,只要主机商启用了对应模块就行。

通过以上几种方式,基本能覆盖大多数Apache防盗链的需求。从最简单的重写规则到更专业的安全模块,按需选择就好。

来源:https://www.yisu.com/ask/816849.html
上一篇Maven项目打包Docker镜像的三种常用插件使用方法详解 下一篇如何启用Apache2模块的详细步骤方法与完整指南
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
FileZilla断点续传设置与操作指南
编程语言 · 2026-07-25

FileZilla断点续传设置与操作指南

FileZilla支持断点续传,需客户端与服务器均开启REST命令。设置中确保启用断点续传及继续传输选项。中断后自动或手动从断点恢复。注意服务器支持、传输模式匹配及文件完整性校验。

Debian系统C++编译器位置查找方法
编程语言 · 2026-07-25

Debian系统C++编译器位置查找方法

在Debian系统中,通过apt安装的C++编译器g++默认位于 usr bin g++,可使用which或whereis命令验证路径。g++属于build-essential软件包,若未安装则需执行sudoaptinstallbuild-essential。该包还包含gcc、make等编译工具链,g++是GNUC++编译器,实际是符号链接指向具体版本,验证

Debian系统安装C++环境的方法
编程语言 · 2026-07-25

Debian系统安装C++环境的方法

在Debian系统安装C++开发环境:先sudoaptupdate更新包列表,再sudoaptinstallbuild-essential安装编译工具链,或单独安装g++。用g++--version验证。可选安装VSCode、GDB、CMake等工具并配置默认编译器版本。

Debian系统C++开发环境配置指南
编程语言 · 2026-07-25

Debian系统C++开发环境配置指南

在Debian系统中,先执行aptupdate更新软件包列表,再安装build-essential元包即可获得GCC、G++、Make和GDB。通过运行g++--version命令验证编译器安装成功。可选安装VisualStudioCode、CLion等编辑器及CMake构建工具,并编写一个简单的HelloWorld程序,使用g++编译运行以验证环境配置正确

通过cpustat工具查看CPU状态的具体方法与详细步骤
编程语言 · 2026-07-25

通过cpustat工具查看CPU状态的具体方法与详细步骤

cpustat是sysstat包中的CPU监控工具,可按固定间隔输出带时间戳的CPU使用率统计。安装后运行cpustat即可实时显示各核心信息,常用指标包括%usr、%sys、%iowait、%steal和%idle,用于定位用户态、内核态或I O瓶颈。高级选项-c可显示单核统计,-m可同时查看内存使用,适合脚本采集和性能分析。