繁体   English   中英

与Apache httpd和Tomcat结合使用的长URL

[英]Long URLs in combination with Apache httpd and Tomcat

我目前正在配置Apache httpd以通过AJP(使用mod_proxy_ajp)将'/ api / foo'的所有流量定向到特定的Tomcat实例。 为此,我在httpd配置文件中有以下ProxyPass规则:

ProxyPass /api/foo ajp://localhost:9999/api/foo connectiontimeout=300 timeout=300 retry=3

此Tomcat实例在其server.xml中定义了以下连接器:

<Connector port="9999" protocol="AJP/1.3" redirectPort="9443"/>

使用此配置,我在访问/ api / foo时正确访问了我的Tomcat实例。 然而,当URL变得大于300个字符我似乎无法达到我的Tomcat实例, 有时

可能是第一个小时我得到了超时,而另一个小时可能就是一切都很顺利。

当我得到超时时,我在httpd错误日志中看到以下错误:

[error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[error] ajp_read_header: ajp_ilink_receive failed
[error] (70007)The timeout specified has expired: proxy: read response failed from 127.0.0.1:9999 (localhost)

以下结果在我的httpd访问日志中:

"GET /api/foo/barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr HTTP/1.1" 503 323 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:33.0) Gecko/20100101 Firefox/33.0"

奇怪的是,这个请求似乎没有到达我的Tomcat实例。 我没有看到任何到达我的应用程序日志记录,我也没有看到我的Tomcat访问日志中的请求。

有谁知道这个问题的原因是什么? 超时设置为超过1分钟,所以我希望请求至少到达我的Tomcat实例...

最后一点,我尝试将AJP连接器的packageSize设置为65536,将Apache httpd的LimitRequestFieldSize和ProxyIOBufferSize设置为65536.这并没有解决问题。

在没有更好的答案的情况下,我会分享我对类似且可能相同的问题的经验,并建议您更改正在使用的连接器。

我也收到了相同的ajp_read_header: ajp_ilink_receive failed在使用apache 2.2和tomcat 6在稍微不同的环境中使用mod_proxy_ajp时ajp_read_header: ajp_ilink_receive failed

当我们遇到问题时,我尝试了许多各种建议的修复程序,包括连接器超时和其他连接器设置。

根据我的阅读,其中一些将在不同的情况下工作,错误ajp_ilink_receive failed消息似乎是非常通用的。 在您的情况下,当URL超过300个字符时会发生这种情况 - 有时至少...

尝试了tomcat server.xml中的许多不同连接器属性以及在ajp:// URI之后附加的apache ProxyPass设置后,我几乎放弃了沿着这条路走下去。 从那时起,我尝试了mod_proxy和mod_jk,它们似乎都解决了这个问题,或者至少没有更多的ajp错误。 但是无论如何mod_proxy都不会发生这种情况,因为它没有与ajp连接。

所以我建议将tomcat连接器更改为mod_proxy或mod_jk。 上有差异的各种写起坐,但网页在这里 ,并在这里对Tomcat的期望是相当不错的信息来源。 您将要根据您的设置在mod_proxy和mod_jk之间进行选择。 mod_jk虽然不同,但实际上并不太难设置(但你可能需要为apache构建mod_jk.so)。

总结不同的连接器;

  • mod_jk:最高推荐。 ajp连接器。 目的设计。 驻留在apache之外的不同配置设置。 将具有certian名称的webapp连接到其他URL名称时很难配置。
  • mod_proxy:http连接器。 据报道比mod_proxy_ajp更稳定。 传递ssl变量的问题?
  • mod_proxy_ajp:最不推荐但最常见的。 ajp连接器。 mod_proxy的扩展。 易于实施。

如果由于某种原因这不起作用。 其他人已经成功地研究了tomcat方面的问题,例如长时间运行的查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM