Tomcat Google负载平衡器随机失败对后端的请求

Tomcat Google负载平衡器随机失败对后端的请求,tomcat,load-balancing,google-compute-engine,google-cloud-platform,Tomcat,Load Balancing,Google Compute Engine,Google Cloud Platform,我做了简单的设置: 后端(网站): 1台安装了tomcat并在8080上运行的机器。 tomcat的webapps文件夹有两个文件夹 1 withGoogleRule1 |--test.html 2 withoutGoogleRule1 |--test.html 现在我有一个谷歌负载平衡器设置与以下设置 现在后端机器directip已启用 负载平衡器url为 问题: 无论我们刷新direct machine的url多少次,所有请求都始终正确 但如果您使用负载平衡

我做了简单的设置:
后端(网站): 1台安装了tomcat并在8080上运行的机器。
tomcat的webapps文件夹有两个文件夹

1 withGoogleRule1
       |--test.html
2 withoutGoogleRule1
       |--test.html
现在我有一个谷歌负载平衡器设置与以下设置

现在后端机器
direct
ip已启用

负载平衡器url为

问题:

无论我们刷新direct machine的url多少次,所有请求都始终正确

但如果您使用负载平衡器访问url,它会显示五分之一的时间

The requested URL /withoutGoogleRule1/test.html was not found on this server.
详细信息:

显示请求失败

PS:

实例组详细信息:

负载平衡器后端详细信息

如果您的Tomcat只在8080而不是80上侦听,则实例组、后端服务配置有问题。特别是,健康检查被配置为检查端口80,这将使负载平衡器认为后端服务不健康并返回404

此外,您可以查看Tomcat日志,查看收到了多少请求以及响应是什么


编辑:因为您确认另一个进程正在监听80。找不到404的原因可能是,请求在内部被调度到80。你可以通过在80和8080上托管一个页面来验证这个理论,例如/a.html,但内容不同,一个是“我80”,另一个是“我8080”。这样,你就可以确切地知道发生了什么。查看80的监听过程日志也会有所帮助。

您能详细说明“withGoogleRule1”和“withoutGoogleRule1”的含义吗?你来这里的目的是什么?我很困惑,您为withGoogleRule1配置了URL映射,但您试图在没有GoogleRule1的情况下访问。您可以检查Tomcat日志,以确保404是由自身返回的还是由负载平衡器返回的。您的实例组的类型是什么?托管还是非托管?我注意到在您的实例组和后端服务中,您将http映射到80和8080。在健康检查中,您使用了端口80。“withGoogleRule1”和“withoutGoogleRule1”仅用于测试目的。。“withGoogleRule1”是添加到google“主机和路径”中的url。。。。“Without GoogleRule1”是一个未添加到google的主机和路径部分的url。感谢您指出…但我看到一个奇怪的行为…我在端口80处有一个httpd服务器,因此该实例始终是健康的。。。上面提到的行为还在继续……接下来我只是从“编辑实例组”部分删除了80,现在它不会随机地使请求失败。。你是对的原因是什么。。我跟随你的实验,现在当我刷新它时,有时显示“我80”,有时显示“我8080”。。。所以基本上结论是后端服务使用实例组“命名端口”部分中提到的所有端口将请求发送到后端…对吗?。。。在load balancer中编辑后端部分时,我找不到任何解释命名端口部分和端口字段的文档……我将专门询问另一个有关命名端口的问题