apache限制资源下载需组合多种策略:1.按mime类型禁止访问(最可靠);2.按后缀限速(需setenvif配合rate_limit);3.按ip限并发(mod_limitipconn);4.定时控制访问(require expr)。

Apache 本身不直接识别“资源类型”这个概念,它靠 MIME 类型(由 mime.types 定义)或文件后缀来判断响应内容。限制特定资源类型的下载,核心是:**按 MIME 类型或扩展名匹配请求,再施加访问控制、限速或限流策略**。不能只依赖单一模块,需组合使用且注意生效前提。
按 MIME 类型限制访问(推荐用于禁止/授权)
这是最可靠的方式,因为 Apache 在处理静态文件时会自动设置正确的 MIME 类型(如 application/zip、video/mp4),比单纯匹配后缀更准确。
- 在
<location></location>或<directory></directory>块中,用SetEnvIf捕获 MIME 类型:
SetEnvIf Content-Type "^application/(zip|rar|x-rar-compressed|octet-stream)$" block-download
SetEnvIf Content-Type "^video/.*$" block-download
Require all granted
Require all granted
Require not env block-download
- 上面配置会拒绝所有 ZIP、RAR、通用二进制及视频类文件的访问;
Content-Type是响应头字段,该方式仅对 Apache 原生输出的静态文件有效(PHP 输出或代理转发的文件不适用)。
按文件后缀做限速(需绕过 mod_ratelimit 局限)
mod_ratelimit 不推荐直接绑定后缀,但它可配合环境变量,在正确作用域下启用:
- 先用
SetEnvIf标记 URI 后缀:
SetEnvIf Request_URI "\.(zip|iso|7z|tar\.gz)$" need-ratelimit=1
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 再在全局或目录块中启用过滤器:
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 100
- 注意:
rate-limit 100表示 100 KB/s;必须确保文件由 Apache 直接读取并发送(未被 PHP、X-Sendfile、反向代理接管)。
按 IP 限制并发下载线程数(防迅雷类多线程)
使用 mod_limitipconn(需手动编译加载),它基于 Apache 的连接状态工作,对大文件下载压制效果明显:
- 启用并配置模块:
MaxConnPerIP 3
OnlyIPLimit application/zip application/x-rar-compressed application/x-7z-compressed
-
OnlyIPLimit后跟的是 MIME 类型(查mime.types确认),不是后缀;MaxConnPerIP 3表示同一 IP 最多 3 个并发连接请求该类型资源。
定时开放/关闭特定资源访问
适用于周报、临时资料等有明确时效性的文件,用 Require expr 结合时间函数:
- 例如:仅允许每周一至五 8:30–12:00 和 13:30–17:30 访问
/reports/*.pdf:
Require all denied
Require expr "(time_wday >= 1 && time_wday (\
(time_hour == 8 && time_min >= 30) || \
(time_hour > 8 && time_hour (time_hour == 12 && time_min == 0) || \
(time_hour == 13 && time_min >= 30) || \
(time_hour > 13 && time_hour (time_hour == 17 && time_min )"
- 服务器使用本地系统时区,务必用
date命令确认;time_wday周一为 1,周日为 0。










