Apache通过前置访问控制实现mod_proxy的后端服务限制,核心是利用mod_authz_host等模块在ProxyPass前配置IP、用户或路径规则:1. IP白名单;2. IP与用户双重校验;3. 请求路径正则匹配。

通过 mod_proxy 限制对特定后端服务的访问,核心不是靠 mod_proxy 本身(它只负责转发),而是在 ProxyPass 前插入访问控制逻辑,利用 Apache 的认证与授权模块(如 mod_authz_host、mod_auth_basic)实现路径级拦截。关键在于“控制前置”,而非依赖后端。
以下是最常用、最稳妥的三种方式,按使用场景递进:
按 IP 地址限制访问(白名单最简方案)
适合内网 API、运维接口等只需来源可信的场景。配置直接、无用户交互。
- 确保已启用
mod_proxy、mod_proxy_http和mod_authz_core - 在虚拟主机或主配置中用
<Location>包裹代理指令,并加Require ip - 示例:只允许内网段和指定运维机访问
/api/
<Location "/api/">
ProxyPass "http://192.168.1.20:8080/"
ProxyPassReverse "http://192.168.1.20:8080/"
Require ip 192.168.10.0/24 10.0.5.100
</Location>不匹配的请求直接返回 403,不会触达后端。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
结合用户名与 IP 的双重校验
适用于“外网需账号+内网免密”或“某 IP 段仅限指定人员”的混合策略。
- 必须配
AuthType Basic+AuthUserFile,再用<RequireAll>或<RequireAny>明确逻辑关系 - 错误写法:
Require ip ...和Require user ...并列——这是 OR 关系,会降低安全性 - 正确写法:用
<RequireAll>表示“既要 IP 合法,也要用户合法”
<Location "/admin-api/">
AuthType Basic
AuthName "Admin API"
AuthUserFile /etc/apache2/auth/.htpasswd
<RequireAll>
Require ip 192.168.5.0/24
Require user admin ops
</RequireAll>
ProxyPass "http://backend:8080/admin/"
ProxyPassReverse "http://backend:8080/admin/"
</Location>按请求路径特征做细粒度拦截
不希望全路径受限,只拦敏感操作(如导出、删除、批量修改)时用此法。
- 可用
<FilesMatch>匹配 URI 中的关键字(如export、delete) - 更灵活的方式是用表达式(Apache 2.4+):
Require expr,支持正则与逻辑组合 - 注意:这类规则要放在
<Location>内,且在ProxyPass之前生效
<Location "/api/">
ProxyPass "http://backend:8080/"
ProxyPassReverse "http://backend:8080/"
Require expr %{REQUEST_URI} =~ m#^/api/v1/(export|batch-delete)# && %{REMOTE_ADDR} in {"127.0.0.1", "192.168.20.50"}
</Location>只有来自本地或指定管理机、且 URI 匹配敏感关键词的请求才被放行。
不复杂但容易忽略。

















