我遇到了正确使用反向代理的问题。当我使用反向代理时,我不断收到"504 逃生超时"。
我按照Microsoft的示例设置了集群。
恕我直言,我认为集群设置是正确的,唯一的区别是我为代理指定了端口 80,我没有将 SSL 用于测试环境。
我目前正在测试环境中尝试它,但生产环境正在运行相同的服务,只是没有反向代理,它很好。此外,我已经在测试 env 上公开了其中一个服务的端点,尝试调用它而不带反向代理并且它起作用了。
我已经读到这可能是由容器引起的,但我使用的是Windows 2012 RC2数据中心。据我所知,它不使用Windows nat容器。另外,我读到这可能是由 404 错误(示例文档中的 #case 2)引起的,它尝试重新加载它并只是超时尝试。
这些是一些总结的细节,可能很重要
- 服务结构版本:5.5.219.0
- 操作系统:视窗
- 货号: 2012-R2-数据中心
- 服务正在使用网络侦听器
- 允许所有端口
- 1 节点类型(无状态)
- 使用核心 Web API 模板创建的 ASP.NET 服务
- VS 2015 企业 版
服务终结点的配置如下: 终结点协议="http" 名称="服务终结点" 类型="输入">
所有服务和群集都运行正常。
我找到了此超时的原因。只是我没有正确在请求 url 中进行所需的更改。
我的所有服务都持有以服务名称命名的 MVC 控制器。因此,每当我在没有反向代理的情况下调用它们时,我的请求 url 都会像http://mycluster.westeurope.cloudapp.azure.com:8280/Notifications/TestMethod
这就足够了,因为它可以通过唯一的端口找到控制器。 我一直试图用反向代理调用它的方式是http://mycluster.westeurope.cloudapp.azure.com/SomeName.API.Services/Notifications/TestMethod
这还不够,因为"通知"被解析为服务的名称而不是控制器。所以我在没有指定控制器的情况下调用服务和操作。
调用它的正确方法是包含服务名称两次,因为我已将控制器与服务相同(我可能会更改它)。 这是我必须使用的正确网址http://mycluster.westeurope.cloudapp.azure.com/SomeName.API.Services/Notifications/Notifications/TestMethod
我通过查找反向代理代码示例弄清楚了。