You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用AJP配置Apache反向代理后的Tomcat并解决认证透传问题

移除AJP后Kerberos认证透传至Tomcat的解决方案

AJP协议默认会直接将Apache侧的认证上下文传递给Tomcat,切换为mod_proxy_http后需要手动配置请求头传递、Tomcat参数适配才能恢复Kerberos认证透传能力,具体操作步骤如下:

1. Apache侧配置调整

  • 首先确认基础配置生效:已加载mod_auth_gssapi/mod_auth_kerb、mod_proxy、mod_proxy_http、mod_headers模块,Apache本地Kerberos认证正常,访问Apache资源时可正常获取到REMOTE_USER(可在Apache日志中打印该变量验证)。
  • 在对应的VirtualHost配置块中补充以下配置:
# 保留原始请求的Host头,避免Tomcat重定向地址错误
ProxyPreserveHost On
# 透传Kerberos认证的用户名到Tomcat
RequestHeader set X-Forwarded-User "%{REMOTE_USER}s"
# 透传原始请求协议,适配HTTPS场景
RequestHeader set X-Forwarded-Proto "https"
# 原有Proxy配置保持不变
ProxyPass / http://<Tomcat内网地址>:<端口>/
ProxyPassReverse / http://<Tomcat内网地址>:<端口>/
# 如需要开启Kerberos票据委托,额外添加以下配置(可选)
GssapiDelegateCredentials On

2. Tomcat侧配置调整

  • 编辑conf/server.xml,添加RemoteIpValve阀门,信任Apache代理地址并读取传递的认证用户头:
<Valve className="org.apache.catalina.valves.RemoteIpValve"
       internalProxies="<Apache服务器的内网IP,多个IP用|分隔>"
       remoteIpHeader="X-Forwarded-For"
       protocolHeader="X-Forwarded-Proto"
       remoteUserHeader="X-Forwarded-User" />
  • 如你的应用有特殊权限校验逻辑依赖javax.servlet.security.UserPrincipal,上述配置即可让request.getRemoteUser()、request.getUserPrincipal()正常返回Kerberos认证信息,无需修改业务代码。

3. 异常排查

  • 如认证信息仍未透传,执行apache2ctl -M(Debian/Ubuntu)或httpd -M(CentOS/RHEL)确认headers_module已正常加载
  • 检查Apache配置中没有对X-Forwarded-User头做过滤、重写操作
  • 如使用HTTP协议而非HTTPS,确认Kerberos策略允许在HTTP场景下传递认证信息

内容的提问来源于stack exchange,提问作者MikeB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:36:02