小编Oğu*_*pçu的帖子

ARR 在客户端用户之间混合 HTTP 服务器变量

我正在尝试做什么?

我正在设置蓝绿部署以实现零停机部署。

执行情况如何?

  1. 我有一台服务器。
  2. 我创建了一个网络农场。
  3. 我在不同的端口设置了蓝色、绿色、主要的 3 个网站。Main 处理来自客户端的所有请求并将请求重写到 Web Farm。
  4. Web 场通过 ARR(应用程序请求路由)将请求路由到活动网站(蓝色或绿色)
  5. 由于蓝/绿网站收到来自 Web Farm/ARR 的请求,因此 REMOTE_ADDR(客户端 IP 地址)显示为 127.0.0.1。
  6. 我不想要它,尽管它是预期的,但我创建了一个 URL 重写规则,该规则在主网站上使用 REMOTE_ADDR 设置 HTTP_X_FORWARDED_FOR_INTERNAL 服务器变量。
  7. 我在蓝/绿网站上创建了另一个规则,该规则使用来自主网站的 HTTP_X_FORWARDED_FOR_INTERNAL 设置 REMOTE_ADDR 服务器变量。
  8. 结果,我将 REMOTE_ADDR 作为真实的客户端 IP 地址。好极了!
  9. 对于单个客户端用户,一切正常。

什么没有按预期工作?

当我从不同的 IP 地址连接到网站时,尤其是对于静态内容,蓝色/绿色应用程序接收到其他客户端拥有的错误 IP 地址(REMOTE_ADDR)。

例子:

  1. A和B是不同的IP地址。
  2. A 连接到 foo.com/somestaticfile.css。
  3. B 连接到 foo.com/somestaticfile.css。

当我检查 IIS 应用程序日志时,来自 B 的请求日志显示 IP 地址为“A”,尽管它应该是 B!

我还可以根据cookie确认请求来自B,我们在cookie中持有ip地址,根据IIS应用程序日志,cookie中的ip地址不等于REMOTE_ADDR。

编辑:我发现了另一个问题,“有时”某些 javascript 响应的 mime 类型在响应中变成了“text/html”,因为我们实现了 X-Content-Type-Options=nosniff,浏览器不会加载这些脚本。

Refused to execute script from 'https://foo.com/bundles/scripts/common?v=Pc3UWD-GF8GEIazC15mnIr_UYtcH3cQPlDPwAf2cXtU1' because its MIME type …
Run Code Online (Sandbox Code Playgroud)

iis load-balancing web-farm arr

5
推荐指数
1
解决办法
1131
查看次数

标签 统计

arr ×1

iis ×1

load-balancing ×1

web-farm ×1