ZEUS ZXTM 中断对 Java Servlet HTTP 404 的 HTTP 请求?

ZEUS ZXTM 中断对 Java Servlet HTTP 404 的 HTTP 请求?

我有一个名为“ARI”的 Java Servlet,它从存档数据库检索数据并返回包含该数据库中行的 XML 有效负载。

我们在一个盒子里的虚拟服务器上运行着这个 servlet 的多个实例,可以通过不同的端口号访问,如下所示:

testserver.co.uk:61061/aricp/ari

testserver.co.uk:61062/aricp/ari

这两个 servlet 都可以直接从客户端成功访问,这里是通过数据包捕获获取的客户端和服务器之间的示例对话。

成功的 HTTP 请求:

POST /aricp/ari HTTP/1.1 接受字符集: UTF-8

内容类型:application/x-www-form-urlencoded;charset=UTF-8

用户代理:Java/1.6.0_25

主机:testserver.co.uk:61061

接受:text/html、image/gif、image/jpeg、*;q=.2,/;q=.2

连接:保持连接

内容长度:11

id=1-134ISR

注意请求中的 POST 变量“id”

成功响应

HTTP/1.1 200 正常

服务器:Sun-ONE-Web-Server/6.1

日期:2013 年 1 月 8 日星期二 17:48:49 GMT

内容类型:text/html

传输编码:分块

03a6


*成功的 HTTP 请求服务器日志 *

[09/Jan/2013:10:25:33] 正常 (16359): 对于尝试 GET /aricp/ari 的主机 10.232.191.87,ntrans-j2ee 报告: 将上下文“/aricp”中的 uri“/ari”映射到资源“ARI”

因此,直接向我们的 servlet 发送请求是可以的,但是如果我们使用 ZEUS ZXTM 间接处理从客户端到我们 servlet 的所有实例的请求,那就行不通了。

这是一个失败的 HTTP 请求,请注意 HOST 地址的差异,因为 ZEUS 是中介。

ZEUS 失败的 HTTP 请求

POST /aricp/ari HTTP/1.1 接受字符集: UTF-8

内容类型:application/x-www-form-urlencoded;charset=UTF-8

用户代理:Java/1.6.0_25

主机:zeus.co.uk:61061

接受:text/html、image/gif、image/jpeg、*;q=.2,/;q=.2

连接:保持连接

内容长度:11

id=1-PUZK7D

ZEUS 失败 HTTP 响应

HTTP/1.1 404 未找到

服务器:Sun-ONE-Web-Server/6.1

日期:2013 年 1 月 8 日星期二 18:05:45 GMT

内容长度:292

内容类型:text/html

当使用 ZEUS 时,Web 服务器无法将来自 ZEUS 的请求解释为 servlet 请求,而是将请求 URI 解释为文件路径,因此我们收到 404 未找到错误。

ZEUS 失败 HTTP 请求服务器日志

[09/Jan/2013:10:50:45] 警告(16886):对于主机 10.232.184.53 尝试 GET /aricp/ari,发送文件报告:HTTP4142:找不到 /u02/SunONE61060/docs/aricp/ari(未找到文件)

如您所见,它将 uri 视为目录路径而不是应用程序路径。

这是一个非常奇怪的问题。


我尝试过的事情

  • 删除访问控制列表以确保没有访问受到限制
  • 刷新 servlet 和虚拟服务器
  • 刷新 ZEUS
  • 重新启动 Sun One Web 服务器
  • 在虚拟服务器上重新安装 servlet

总的来说,它运行良好,如下所示:

客户端-->服务器

但是这样做却不起作用:

客户端--ZEUS-->服务器

我正要去刷新安装一个新的虚拟服务器并看看会发生什么。

欢迎任何想法或理论。

答案1

我不确定为什么您只有一个后端服务器,也许这只是一个测试设置。ZXTM
是一个强大的负载平衡器,看来您目前或多或少将其用作反向代理。

无论如何,您通常设置类似这样的方式:
- 创建一个 DNS 记录并将myapp.example.com其指向 ZXTM 集群的流量 IP
- 设置您的后端应用程序以监听myapp.example.com
- 在使用流量 IP 的 ZXTM 集群中创建一个虚拟服务器
- 在 ZXTM 集群中创建一个新池并添加testserver.co.uk:61061到它
- 将新池分配给创建的虚拟服务器

然后,您可以通过 访问您的应用程序myapp.example.com
您仍然可以直接在后端节点上访问应用程序(例如,出于监控目的),但根据应用程序的工作方式,您可能需要为此调整 Host-header。

相关内容