下游 IBM Httpd Server 仅在通过另一个上游 IHS Web 服务器访问时才返回 404

下游 IBM Httpd Server 仅在通过另一个上游 IHS Web 服务器访问时才返回 404

我们当前的设置如下:

  • HTTP 服务器 -IBM HTTPD 服务器 v?
  • WASServer6.1 — WebSphere 应用服务器 v6.1(正在运行应用程序“A”)

列出的端口上的基本通信如下。[列出的所有端口号都是监听端口。]plugin-cfg.xml配置正确,并且相同的拓扑已在生产环境中运行了 6 年以上。

HTTPServer:8080 --> WASServer6.1:9081

我们现在需要适应这些新事物,稍微改变一下拓扑结构:

  • IHSServer - IBM HTTPD Server v?(比上面的更新)
  • WASServer8.5-WebSphere 应用程序服务器 v8.5.5(运行应用程序“B”)
  • AuthService-独立 Java 服务(不在应用容器中运行)

    HTTPServer:8080 ---> AuthService:9090 ---> IHSServer:8081 ---> WASServer8.5:9081
                    \
                     \
                      WASServer6.1:9081
    

HTTP服务器httpd.conf配置了ProxyPass将某些请求代理到授权服务:9090AuthService 会做一些工作,然后将请求的标头复制到新的 [POST] 请求中,并发送给IHS服务器:8081,其中plugin-cfg.xml与应用程序 B 信息映射,以将请求转发到在WAS服务器8.5。最终目标是利用插件对 WAS JVM 的状态感知。在我们的生产级环境中,IHS 可以将请求转发到多个 JVM。
笔记: AuthService 是无状态的,因此不需要与 WAS 上的特定 JVM 有任何关联。

问题是,出于某种原因,这种方法不起作用。通过此路径发送的请求会返回HTTP 404来自信息服务服务器

使用详细日志进行故障排除信息服务服务器发现由于某种原因,IHSServer 正在查看原始转发代理的端口号 (HTTPServer:8080),并将其与(为什么?)VirtualHostGroup中列出的虚拟主机进行比较plugin-cfg.xml。由于找不到端口 8080 的合适匹配项,它放弃了并输出 404。

如果我们进行如下替换,首先访问其他监听 80 端口的 Apache 服务器:

    SomeOtherHTTPServer:80 ---> AuthService:9090 ---> IHSServer:8081 ---> WASServer8.5:9081
                       \
                        \
                         WASServer:9081

...请求被 IHSServer 接受,一切正常。同样,如果将格式正确的请求负载直接发送到 AuthService:9090,请求将被接受,一切正常。

我们尝试<VirtualHost Name="*:8080"/>添加plugin-cfg.xml信息服务服务器,但这似乎并没有什么区别。

编辑:我们对这条路径上的每个节点都进行了一些tcpdump捕捉,很明显信息服务服务器立即拒绝通过 404 的请求HTTP服务器:8080。IHSServer 甚至没有尝试对该请求执行任何操作。

我们还能做什么来排除故障/纠正这个问题?为什么 IHSServer 上的插件会关心上游 Web 服务器的监听端口?

答案1

我在您的帖子中没有看到“ProxyPreserveHost”。您试过了吗?

在我看来,这可能是 IHS 服务器在端口 8081 上生成 404 的原因(由于 plugin-cfg.xml 中没有匹配项并作为静态文件处理)或由 AppServer 本身生成(当它检查其自己的主机别名概念以确定 Web 应用程序映射时)。

答案2

您可能还需要添加虚拟主机别名VirtualHost Name="*:8080"WASServer8.5然后重新启动 WAS 8.5 服务器以进行更改,这样应该就可以了。

一般情况下,需要在从IHS conf到WAS插件到WAS VirtualHosts各个层面配置Virtual host(*:8080)。

相关内容