核心是让AJP二进制协议稳、准、轻运行:需显式加载mod_proxy_ajp模块、Tomcat AJP Connector绑定127.0.0.1(或内网IP)、ProxyPass路径与context path严格一致(含斜杠),并手动补全X-Forwarded-For等头,否则易现503或IP丢失。

用 mod_proxy_ajp 提升 Apache 与 Tomcat 的动静交互性能,核心不是“加了就快”,而是让 AJP 这个二进制协议真正稳、准、轻地跑起来——它比 HTTP 代理省 CPU、少解析、透传真实 IP 更可靠,但前提是两端配置必须协同对齐,漏掉任一环都可能卡在 503 或丢客户端信息。
确保 mod_proxy_ajp 模块已启用且无干扰
AJP 代理能力不是默认开启的。Apache 2.4 只默认加载 mod_proxy,mod_proxy_ajp 必须显式加载,否则 ProxyPass ajp://... 会静默失败或报 Invalid URL。
- 运行
httpd -M | grep proxy(CentOS/RHEL)或a2enmod -l | grep proxy(Debian/Ubuntu),确认输出含proxy_ajp_module (shared) - 检查模块加载文件(如
/etc/httpd/conf.modules.d/00-proxy.conf或/etc/apache2/mods-available/proxy_ajp.load),确保以下两行未被注释:LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_ajp_module modules/mod_proxy_ajp.so - 禁用
mod_jk:两者共存易引发连接复用错乱,出现 Connection refused 或随机 503
Tomcat 端必须限定 AJP Connector 绑定地址
AJP 默认监听 0.0.0.0:8009,等于把内部通信端口暴露公网——既不安全,又常因 IPv6 回环(::1)与 Apache 的 127.0.0.1 不匹配而连不上。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 编辑
$CATALINA_HOME/conf/server.xml,找到或新增 AJP Connector,并强制指定address="127.0.0.1":<Connector port="8009" protocol="AJP/1.3" address="127.0.0.1" redirectPort="8443" connectionTimeout="60000" keepAliveTimeout="60000" maxThreads="500" /> - 若 Apache 与 Tomcat 分离部署,
address改为 Tomcat 实际内网 IP(如192.168.21.31),并确保防火墙放行该 IP + 8009 - 重启 Tomcat 后执行
ss -tlnp | grep :8009,输出应为127.0.0.1:8009,而非*:8009或:::8009
ProxyPass 路径必须与 Tomcat context path 严格一致
路径错位会导致静态资源 404、重定向跳转错误、Session 丢失等隐蔽问题——AJP 不解析 URL,只做字节转发,路径不对就全乱。
- 假设 Tomcat 应用部署在
/myapp(即 WAR 包名为myapp.war),Apache 配置必须写成:ProxyPass /myapp ajp://127.0.0.1:8009/myappProxyPassReverse /myapp ajp://127.0.0.1:8009/myapp - 结尾斜杠敏感:
/myapp和/myapp/行为不同,务必保持两端完全一致 - 避免使用
ProxyPassMatch(如^/(.*\.jsp)$):AJP 协议不支持后缀匹配,这类规则会绕过代理逻辑
手动补全关键请求头以保障真实信息透传
AJP 协议本身不自动设置 X-Forwarded-For、X-Forwarded-Proto 等头,也不支持 WebSocket。若依赖这些字段做鉴权、跳转或 HTTPS 识别,必须显式添加。
- 在
ProxyPass所在的 VirtualHost 或 Location 块中加入:RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e"RequestHeader set X-Forwarded-Proto "https"(若前端是 HTTPS) - 若需支持 WebSocket,AJP 当前不原生支持;应改用
mod_proxy_wstunnel配合 HTTP 代理,或升级到 Tomcat 9+ 并启用 AJP over TLS(非主流) - 验证方式:在 Tomcat 应用中打印
request.getHeader("X-Forwarded-For"),确认获取的是真实客户端 IP 而非127.0.0.1


















