使用mod_proxy_ajp可降低CPU开销、精准透传客户端IP和SSL状态,但前提是Tomcat AJP Connector必须显式启用并绑定到正确地址(如127.0.0.1),否则即使Apache配置正确也会返回503;需确认mod_proxy_ajp模块已加载、address不为0.0.0.0或::、ProxyPass路径与Tomcat context path严格一致,且真实IP透传和WebSocket需额外配置。

直接用 mod_proxy_ajp 而不是 mod_proxy_http,确实能降低 CPU 开销、更准传客户端 IP 和 SSL 状态——但前提是 Tomcat 的 AJP Connector 必须显式启用且绑定到正确地址,否则配置再对也返回 503。
确认 mod_proxy_ajp 模块已加载且无冲突
Apache 2.4 默认只加载 mod_proxy,mod_proxy_ajp 是独立模块,不启用就完全不工作,且不会报错,只会静默 fallback 到失败路径。
- 运行
httpd -M | grep proxy,必须看到proxy_ajp_module (shared) - 检查
/etc/httpd/conf.modules.d/下的配置文件(如00-proxy.conf),确保LoadModule proxy_ajp_module modules/mod_proxy_ajp.so未被注释 - 禁用
mod_jk:两者共存时可能抢夺 AJP 连接,导致Connection refused或复用异常
Tomcat 的 AJP Connector 必须限定 address 绑定
默认的 <Connector port="8009" protocol="AJP/1.3"> 监听 *:8009,既不安全,又常因 IPv6 回环地址(::1)与 Apache 的 127.0.0.1 不匹配而连不上。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 编辑
$CATALINA_HOME/conf/server.xml,强制指定address="127.0.0.1" - 重启 Tomcat 后执行
ss -tlnp | grep :8009,输出应为127.0.0.1:8009,而非*:8009或:::8009 - 若 Apache 与 Tomcat 分离部署,
address改为 Tomcat 实际内网 IP(如192.168.21.31),并确保防火墙放行该端口
ProxyPass 路径必须与 Tomcat context path 严格对齐
ProxyPass / ajp://localhost:8009/ 看似通用,实则极易破坏重定向和静态资源路径——Tomcat 应用若部署在 /myapp,所有请求都会被丢进根上下文,导致 404 或跳转错乱。
- Apache 的
ProxyPass和ProxyPassReverse路径必须完全一致,包括结尾斜杠(/myapp/vs/myapp行为不同) - 例如 Tomcat 应用 context path 是
/myapp,则 Apache 配置应为:ProxyPass /myapp ajp://localhost:8009/myappProxyPassReverse /myapp ajp://localhost:8009/myapp - 避免使用
ProxyPassMatch匹配后缀(如^/(.*\.jsp)$):AJP 协议不解析 URL,这类规则会绕过代理逻辑
真实 IP 透传和 WebSocket 是两个硬限制点
AJP 协议本身不自动设置 X-Forwarded-For,也不支持 WebSocket —— 这两点无法靠调参绕过,必须提前规划。
- 若 Tomcat 用了
RemoteIpValve或需记录真实客户端 IP,Apache 必须显式加:RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s - AJP 完全不处理
ws://或wss://升级请求;要代理 WebSocket,必须另配mod_proxy_wstunnel并走 HTTP 协议(ProxyPass /ws ws://...) - 别指望
keepalive=On或retry=60参数单方面提升吞吐——真正瓶颈常在 Tomcat 端的maxThreads与 Apache 的MaxRequestWorkers是否匹配
最常被忽略的是:AJP 的性能优势只在高并发混合请求下才明显,而配置失败往往卡在 Tomcat 端未开 AJP 或绑错地址,而不是 Apache 的 ProxyPass 写法。先验证 ss -tlnp 和 httpd -M,比反复改重写规则快得多。


















