Apache虚拟主机不能自动关闭,但可通过Require expr按时间控制访问权限,如限制工作日9:00–18:00访问或每天19:00至次日8:59返回403,无需重启服务、不中断其他站点。

Apache 虚拟主机本身不能“自动关闭”,但可以通过时间条件控制访问权限,实现非工作时间禁止访问的效果。这种方式无需重启服务、不中断其他站点,且配置生效即时。
用 Require expr 按小时限制访问
在目标测试站点的
- 确保 Apache 版本 ≥ 2.4(Require expr 是 2.4+ 的功能)
- 确认服务器时区设置正确:运行 systemctl show --property=Timezone 查看,若为 UTC 但你期望按北京时间判断,需配合 SetEnv TZ Asia/Shanghai(需已加载 mod_env)
- 在
或 块中写入时间表达式,例如只允许工作日 9:00–18:00 访问:
<Directory "/var/www/test-site"><br> Require expr %{TIME_HOUR} >= 9 && %{TIME_HOUR} < 18 && %{TIME_WDAY} >= 1 && %{TIME_WDAY} <= 5<br></Directory>
说明:%{TIME_HOUR} 是 0–23 的整数;%{TIME_WDAY} 是星期几(0=Sunday,1=Monday…),所以 1–5 表示周一至周五。
针对纯测试站,推荐更严格的全站拦截
如果该站点仅用于内部测试,可直接在
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 避免遗漏子路径(如 /api、/static)
- 返回 403 状态码,比重定向更明确,也便于监控识别
- 配置示例(每天 19:00 至次日 8:59 禁止访问):
<Location "/"><br> Require expr %{TIME_HOUR} < 9 || %{TIME_HOUR} >= 19<br></Location>
注意:此规则优先级高于 Directory,且不依赖 .htaccess,更可靠。
不建议用定时任务开关站点配置
虽然可用 cron + a2dissite/a2ensite 实现物理禁用,但存在明显缺点:
- 每次切换都要 reload Apache,可能短暂影响其他正常站点连接
- 配置文件符号链接状态易被误操作破坏,排查困难
- 无法精确到分钟级控制(cron 最小粒度是分钟,且执行有延迟)
- 若 reload 失败,站点可能意外离线,缺乏回退保障
除非你明确需要彻底屏蔽 DNS 解析后的建连(比如防止爬虫探测端口),否则时间表达式方式更轻量、安全、可维护。

















