apache 2.4 AJP 代理不工作

Posted

技术标签:

【中文标题】apache 2.4 AJP 代理不工作【英文标题】:apache 2.4 AJP proxy not working 【发布时间】:2016-01-31 14:01:06 【问题描述】:

我正在尝试配置我的 Apache 2.4 以连接到我的后端 Tomcat 8.0.28。在我的 Mac OS X El Capitan 中。

我使用了支持 AJP 的 NameBased VirtualHost。配置文件 apache_serviceproxy.conf 位于:/Library/Server/Web/Config/Proxy

<VirtualHost 10.0.1.100:80>
  ProxyPreserveHost On
  ServerName www.storageway.com.au
  ServerAlias storageway.com.au
  ServerAdmin cidy.long@gmail.com
  ProxyPass / ajp://127.0.0.1:8009/StorageWayServer/
  ProxyPassReverse / ajp://127.0.0.1:8009/StorageWayServer/
</VirtualHost>

Tomcat 应用上下文是:http://localhost:8080/StorageWayServer,从局域网访问 Tomcat,一切正常。但是当我尝试通过 Internet 请求时,apache 2.4 通过 AJP 调用 Tomcat 无法正常工作。

Tomcat 正确接收到来自 apache AJP 的 html 请求(),但从那时起,html 中包含错误请求 url 的每个包含 css、javascript 和图像,它是简单的双应用程序上下文名称。

这是我的 Tomcat 访问日志:

148.251.45.185 - - [31/Oct/2015:14:26:07 +1100] "GET /StorageWayServer/ HTTP/1.1" 200 19098
148.251.45.185 - - [31/Oct/2015:14:26:07 +1100] "GET /StorageWayServer/StorageWayServer/dojo-release-1.10.4/dojo/resources/dojo.css HTTP/1.1" 404 1173
148.251.45.185 - - [31/Oct/2015:14:26:08 +1100] "GET /StorageWayServer/StorageWayServer/css/style.css HTTP/1.1" 404 1113
148.251.45.185 - - [31/Oct/2015:14:26:08 +1100] "GET /StorageWayServer/StorageWayServer/dojo-release-1.10.4/dijit/themes/claro/claro.css HTTP/1.1" 404 1183
148.251.45.185 - - [31/Oct/2015:14:26:09 +1100] "GET /StorageWayServer/StorageWayServer/css/dashboard.css HTTP/1.1" 404 1121
148.251.45.185 - - [31/Oct/2015:14:26:09 +1100] "GET /StorageWayServer/StorageWayServer/css/storageway_homeabout.css HTTP/1.1" 404 1143
148.251.45.185 - - [31/Oct/2015:14:26:09 +1100] "GET /StorageWayServer/StorageWayServer/dojo-release-1.10.4/dojo/dojo.js HTTP/1.1" 404 1151
148.251.45.185 - - [31/Oct/2015:14:26:10 +1100] "GET /StorageWayServer/StorageWayServer/images/storageway_logo.png HTTP/1.1" 404 1139
148.251.45.185 - - [31/Oct/2015:14:26:10 +1100] "GET /StorageWayServer/StorageWayServer/images/icons/publish.png HTTP/1.1" 404 1135
148.251.45.185 - - [31/Oct/2015:14:26:10 +1100] "GET /StorageWayServer/StorageWayServer/images/icons/search_engine.png HTTP/1.1" 404 1147
148.251.45.185 - - [31/Oct/2015:14:26:10 +1100] "GET /StorageWayServer/StorageWayServer/images/icons/search33.png HTTP/1.1" 404 1137
148.251.45.185 - - [31/Oct/2015:14:26:10 +1100] "GET /StorageWayServer/StorageWayServer/images/button_hover.gif HTTP/1.1" 404 1133
148.251.45.185 - - [31/Oct/2015:14:26:11 +1100] "GET /StorageWayServer/StorageWayServer/images/button_span_hover.gif HTTP/1.1" 404 1143

如果我通过直接访问Tomcat从局域网请求它,它工作正常,登录为:

10.0.1.222 - - [31/Oct/2015:14:58:53 +1100] "GET /StorageWayServer/images/icons/publish.png HTTP/1.1" 304 -
10.0.1.222 - - [31/Oct/2015:14:58:53 +1100] "GET /StorageWayServer/images/icons/search_engine.png HTTP/1.1" 304 -
10.0.1.222 - - [31/Oct/2015:14:58:53 +1100] "GET /StorageWayServer/images/icons/search33.png HTTP/1.1" 304 -
10.0.1.222 - - [31/Oct/2015:14:58:53 +1100] "GET /StorageWayServer/dojo-release-1.10.4/dijit/dijit.js HTTP/1.1" 304 -
10.0.1.222 - - [31/Oct/2015:14:58:53 +1100] "GET /StorageWayServer/images/button_span_hover.gif HTTP/1.1" 304 -
10.0.1.222 - - [31/Oct/2015:14:58:53 +1100] "GET /StorageWayServer/images/button_hover.gif HTTP/1.1" 304 -
10.0.1.222 - - [31/Oct/2015:14:58:53 +1100] "GET /StorageWayServer/dojo-release-1.10.4/dijit/themes/claro/images/spriteArrows.png HTTP/1.1" 304 -
10.0.1.222 - - [31/Oct/2015:14:58:53 +1100] "GET /StorageWayServer/dojo-release-1.10.4/dijit/themes/claro/form/images/buttonArrows.png HTTP/1.1" 304 -

我试图从谷歌寻求一些帮助并尝试使用

RedirectMatch /StorageWayServer http://www.storageway.com.au/

但我从不从请求 url 中删除额外的应用程序上下文。

欢迎任何建议或经验。

周末愉快!

【问题讨论】:

【参考方案1】:

不要更改 ProxyPass 指令中的上下文路径。当你这样做的时候,有很多很多的方法可以让你在脚上开枪。

据推测,您页面上的链接是绝对的,因此它们包含上下文路径。当客户端随后请求这些时,ProxyPass 指令再次添加上下文路径。

你有三个选择:

    将您的应用程序重新部署为 ROOT Web 应用程序并使用

ProxyPass / ajp://127.0.0.1:8009/

    通过上下文路径访问您的应用程序并使用

ProxyPass /StorageWayServer/ ajp://127.0.0.1:8009/StorageWayServer/

    花费数天/数周的时间尝试配置 mod_sed 或类似功能,以便即时编辑响应以更正链接。

我看到大型组织花费大量时间和金钱来选择选项 3,我真的不推荐它。

【讨论】:

谢谢!标记。我会记住你的建议。您的选项不适合我,因为我有多个应用程序在单个 Tomcat 实例中运行。据我所知,我不会尝试您的选项三,那样也会导致其他问题。 如果这个问题不能轻易解决,说明 Apache 2.4 不能很好地支持使用 AJP 配置的多个应用程序配置。如果不是建议的apache AJP,希望apache在未来的版本中有更好的实现。

以上是关于apache 2.4 AJP 代理不工作的主要内容,如果未能解决你的问题,请参考以下文章

httpd通过ajp协议反向代理tomcat

apache反向代理tomcat

Apache 2.4 - 简单的反向代理 - 不适用于多个条目

apache分别基于三种方案实现tomcat的代理负载均衡及会话绑定

Apache + Tomcat:使用 mod_proxy 代替 AJP

辅助 ajp 工作者不在 apache 和 tomcat 之间工作