我们正在为面向外部和内部的 Web 服务器实现一对网络负载平衡器。我们不打算在任何 NLB 上使用会话状态服务,并且接受如果某个节点出现故障,用户将必须在新服务器上重新进行身份验证,并开始新的会话。
但是我们有一个 ASP.Net4 应用程序,它重定向到外部服务(支付处理器),然后使用静态配置的链接将用户返回到我们面向外部的 URL。
我有两个问题:
当用户付款后返回网站时,有什么方法可以确保他们连接到其会话当前所在的服务器?
当面向内部的 NLB 上的用户完成付款时,该服务将尝试将其返回到外部 NLB。有没有办法拦截并将其重定向回面向内部的集群,然后再重定向到他们的活动会话所在的服务器?
答案1
对于问题 #1,您可以使用 NLBS 亲和性设置。请参阅https://stackoverflow.com/questions/866108/how-to-keep-user-requests-on-the-same-server-when-using-iis-nlb
对于问题 2,有几个选项
- 使用分离 DNS 设置。基本上,您将内部 DNS 与外部 DNS 分开设置。内部客户端将使用内部 DNS 并指向内部 NLBS IP,而外部客户端将使用外部 DNS 并指向外部 NLBS IP。
- 您的支付处理供应商可能支持以编程方式更改返回 URL。我们使用 PayPal Payflow Pro 产品。它允许我们以编程方式设置返回 URL。如果您的供应商支持此选项,那么您可以使用 ASP.NET 检测请求者的地址是否为内部地址并将其指向正确的 URL。您可以使用以下任一属性来获取请求者的 IP 地址
HttpContext.Current.Request.UserHostAddress;
或
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];