apache的mod_proxy本身不处理访问控制,必须在proxypass前用mod_authz_host等模块前置拦截,通过块配置require ip实现ip白名单,支持网段与单ip,需启用mod_authz_core和mod_authz_host。
apache 的 mod_proxy 本身不处理访问控制,它只负责转发请求。真正实现 ip 白名单,必须在代理动作发生前,用 apache 的授权模块(如 mod_authz_host)对请求路径做拦截。关键在于“控制前置”——把白名单规则写在 proxypass 之前,且确保配置位置和语法正确。
1. 基础白名单配置(Location 块内)
这是最常用、最直接的方式,适用于保护某个后端服务路径(如 /api/ 或 /admin/):
- 必须启用
mod_authz_core和mod_authz_host(Debian/Ubuntu 下执行a2enmod authz_core authz_host) - 使用
<location></location>包裹整个代理逻辑,确保规则精准匹配路径前缀 - 第一行必须写
Require all denied,否则未明确允许的请求可能被父级配置放行 - 再逐行添加
Require ip,支持 IPv4 网段(如192.168.10.0/24)和单个 IPv4/IPv6 地址(如2001:db8::1)
示例配置:
ProxyPass "http://192.168.1.20:8080/"
ProxyPassReverse "http://192.168.1.20:8080/"
Require all denied
Require ip 192.168.10.0/24
Require ip 10.0.5.100
Require ip 127.0.0.1
2. 多条件组合:IP + 用户认证双校验
对高敏感接口(如运维后台),仅靠 IP 不够安全,可叠加账号密码验证:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 启用
mod_auth_basic和mod_authn_file - 用
<requireall></requireall>容器包裹多个Require指令,表示“必须同时满足” - 单独写
Require ip和Require valid-user而不加容器,默认是“或”关系,会大幅降低安全性
示例:
Require ip 10.0.10.0/24
Require valid-user
AuthType Basic
AuthName "Admin Access"
AuthUserFile /etc/apache2/.htpasswd
3. CDN 或反向代理环境下的真实 IP 识别
如果前端有 CDN、负载均衡器或 Nginx,Apache 收到的 REMOTE_ADDR 是代理节点 IP,白名单会失效:
- 启用
mod_remoteip(a2enmod remoteip) - 在虚拟主机或主配置中设置:
RemoteIPHeader X-Forwarded-For - 指定可信代理地址:
RemoteIPTrustedProxy 192.168.1.100(填你自己的 LB 或 CDN 回源 IP) - 确认后端应用也读取
X-Forwarded-For,否则日志、限流、鉴权仍不可靠
4. 验证与排错要点
配置完成后,务必检查这三项:
- 运行
apachectl configtest确认语法无误,再systemctl reload apache2 - 从非白名单 IP 访问对应路径,应返回
403 Forbidden;白名单 IP 应正常代理到后端 - 检查是否被其他
<location></location>、<directory></directory>或.htaccess规则覆盖(确保AllowOverride None,避免意外继承)










