Apache mod_proxy_balancer本身不处理认证,需结合mod_auth_openidc等模块实现OIDC认证网关功能,先校验身份再将请求路由至balancer://集群,并透传X-Forwarded-User等关键头给后端。
apache mod_proxy_balancer 本身不处理认证,它只负责负载分发;要集成企业统一认证中心(如 keycloak、okta、authelia 或自建 oidc provider),需让 apache 充当“认证网关”——拦截请求、跳转到认证服务、接收回调、校验身份,并把用户信息安全透传给后端集群。
启用必要模块并确认兼容性
必须加载以下模块,缺一不可:
- mod_proxy 和 mod_proxy_http:支撑反向代理与 HTTP 后端通信
- mod_proxy_balancer 和调度模块(如 mod_lbmethod_bybusyness):管理负载集群
- mod_auth_openidc(推荐)或 mod_authnz_external + 脚本:实现 OIDC 授权码流程
- mod_headers 和 mod_ssl(若走 HTTPS):注入可信头、终止 TLS
验证命令:httpd -M | grep -E 'proxy|auth_openidc|headers|ssl'。Ubuntu/Debian 可用 a2enmod auth_openidc headers ssl;RHEL/CentOS 需检查 /etc/httpd/conf.modules.d/ 下对应 LoadModule 行是否启用。
定义带认证的负载集群
认证和负载均衡需分层协作:先完成身份校验,再将已认证请求路由至 balancer:// 集群。不要在
⚠️ 已弃用 — 该技能已拆分为两个独立技能,以提升模块化程度:**webchat-https-proxy**(HTTPS/WSS 反向代理)和 **webchat-voi...**
- 对需要登录的路径(如 /app/、/api/),启用 OIDC 认证
- 认证成功后,用 ProxyPass 将请求转发到 balancer://myapp
- 确保 ProxyPassReverse 同步配置,修正响应头中的 Location、Set-Cookie 等
示例片段:
<location>
AuthType openid-connect
Require valid-user
OIDCProviderMetadataURL https://sso.example.com/.well-known/openid-configuration
OIDCClientID apache-gateway
OIDCClientSecret xxx
OIDCRedirectURI https://gateway.example.com/callback
OIDCCookieHTTPOnly On
OIDCRemoteUserClaim email
# 透传关键身份信息给后端
OIDCClaimPrefix "OIDC_"
Header set X-Forwarded-User %{OIDC_CLAIM_email}e env=OIDC_CLAIM_email
</location><p><proxy balancer:>
BalancerMember <a href="https://www.php.cn/link/77b72cfe26c89df8636dfd51ec85ed95">https://www.php.cn/link/77b72cfe26c89df8636dfd51ec85ed95</a> loadfactor=2
BalancerMember <a href="https://www.php.cn/link/02c60c884cea01ffd0974a6bf97a3cfc">https://www.php.cn/link/02c60c884cea01ffd0974a6bf97a3cfc</a> loadfactor=1
ProxySet lbmethod=bybusyness timeout=10
</proxy></p><p>ProxyPass "/app/" "balancer://myapp/"
ProxyPassReverse "/app/" "balancer://myapp/"</p>
关键头信息与安全透传
后端服务依赖真实用户上下文做权限判断,Apache 必须可靠传递以下信息:
- X-Forwarded-User:由 OIDC 模块解析 email 或 preferred_username 后注入
- X-Forwarded-Groups:若 IDP 支持 group 声明,用 OIDCUserInfoEndpoint 获取并映射
- X-Forwarded-Proto 和 X-Forwarded-For:确保 ProxyPreserveHost On + mod_remoteip(可选但推荐)
- 禁用非预期头:加 ProxyBadHeader Ignore 防止后端因非法头拒收请求
生产环境加固建议
避免认证绕过与信息泄露:
- 所有 OIDC 相关 endpoint(如 /callback)仅允许内部访问或严格限制 Referer
- 使用 Require ip 127.0.0.1 保护 /balancer-manager,禁用公网暴露
- 设置 OIDCCryptoPassphrase 为高强度随机字符串,且不硬编码在配置中(可用环境变量或外部密钥文件)
- 开启 OIDCSessionInactivityTimeout 和 OIDCSessionMaxDuration 控制会话生命周期
- 日志中屏蔽敏感字段:用 LogFormat 过滤 %{OIDC_CLAIM_id_token}e 等原始 token









