关于 http 设置 "overide host name" 和 "pick host name from backend address" 选项的问题
Questions about options in http settings "overide host name" and "pick host name from backend address"
我对 http 设置选项 "overide host name" 和 "pick host name from backend address" 做了一些测试,但有点困惑,因为不同类型的后端池的结果不同。
APPGW:test.cloudapp.net
后端池 1:VM1(IP1)(与 APPGW 在同一虚拟网络中的 azure 虚拟机);前端 url: test.cloudapp.net:8081
后端池 2:FQDN - test.azurewebsites.net(azure web app);前端 url: test.cloudapp.net:8082
(1) 测试选项 "override host name"
对于两个后端池,将 http 设置中的选项 "override host name" 的值设置为 "test.azurewebsites.net",这是后端池 2 的 FQDN。
尝试访问 url test.cloudapp.net:8081 和 test.cloudapp.net:8082,我认为它应该 return 与 test.azurewebsites.net 相同的结果。但结果是:
对于 test.cloudapp.net:8082,它 return 编辑了预期的 test.azurewebsites.net 的内容。
但是对于 test.cloudapp.net:8081,它 return 在 VM1 上编辑了内容。我的问题是为什么它没有 return test.azurewebsites.net 的内容。
(2) 测试选项 "pick host name from backend address"
默认情况下禁用此选项时,我无法访问 url test.cloudapp.net:8082 而 test.cloudapp.net:8081 可以访问且结果正确。
启用此选项后,url test.cloudapp.net:8081 和 test.cloudapp.net:8082 都可以访问并获得正确的结果。
我的问题是:禁用此选项后,APPGW向后端pool1和后端pool2发送http请求包时,http头中的主机名是什么?
启用此选项后,我认为发送到后端pool1的http数据包中的主机名应该是IP1,而发送到后端pool2的主机名应该是"test.azurewebsites.net",但不确定。
如果有人能对我的测试结果和困惑提供详细的解释,我将不胜感激。
当您 select "Override hostname" 设置时,应用程序网关会将 HTTP 中的主机名 header 设置为您设置的任何主机名。
例如,当您浏览应用程序网关的 IP http://40.x.x.x 时,如果没有 http 覆盖,当数据包到达后端资源时,请求的主机名将是 40.x.x.x(您浏览网站时使用的主机名),如果后端是 Web 应用程序,它期望主机名字段为 xxxx.azurewebsites.net。由于此请求的主机名中包含 ip,因此您的网络应用程序将抛出 404。
为了解决这个问题,您可以选择 "pick hostname from backend address pool" 并将您的 Web 应用 FQDN 指定为后端池,或者您可以覆盖 HTTP 设置中的主机名。
希望这对您有所帮助。
我对 http 设置选项 "overide host name" 和 "pick host name from backend address" 做了一些测试,但有点困惑,因为不同类型的后端池的结果不同。
APPGW:test.cloudapp.net
后端池 1:VM1(IP1)(与 APPGW 在同一虚拟网络中的 azure 虚拟机);前端 url: test.cloudapp.net:8081
后端池 2:FQDN - test.azurewebsites.net(azure web app);前端 url: test.cloudapp.net:8082
(1) 测试选项 "override host name" 对于两个后端池,将 http 设置中的选项 "override host name" 的值设置为 "test.azurewebsites.net",这是后端池 2 的 FQDN。
尝试访问 url test.cloudapp.net:8081 和 test.cloudapp.net:8082,我认为它应该 return 与 test.azurewebsites.net 相同的结果。但结果是: 对于 test.cloudapp.net:8082,它 return 编辑了预期的 test.azurewebsites.net 的内容。 但是对于 test.cloudapp.net:8081,它 return 在 VM1 上编辑了内容。我的问题是为什么它没有 return test.azurewebsites.net 的内容。
(2) 测试选项 "pick host name from backend address" 默认情况下禁用此选项时,我无法访问 url test.cloudapp.net:8082 而 test.cloudapp.net:8081 可以访问且结果正确。 启用此选项后,url test.cloudapp.net:8081 和 test.cloudapp.net:8082 都可以访问并获得正确的结果。 我的问题是:禁用此选项后,APPGW向后端pool1和后端pool2发送http请求包时,http头中的主机名是什么? 启用此选项后,我认为发送到后端pool1的http数据包中的主机名应该是IP1,而发送到后端pool2的主机名应该是"test.azurewebsites.net",但不确定。
如果有人能对我的测试结果和困惑提供详细的解释,我将不胜感激。
当您 select "Override hostname" 设置时,应用程序网关会将 HTTP 中的主机名 header 设置为您设置的任何主机名。
例如,当您浏览应用程序网关的 IP http://40.x.x.x 时,如果没有 http 覆盖,当数据包到达后端资源时,请求的主机名将是 40.x.x.x(您浏览网站时使用的主机名),如果后端是 Web 应用程序,它期望主机名字段为 xxxx.azurewebsites.net。由于此请求的主机名中包含 ip,因此您的网络应用程序将抛出 404。
为了解决这个问题,您可以选择 "pick hostname from backend address pool" 并将您的 Web 应用 FQDN 指定为后端池,或者您可以覆盖 HTTP 设置中的主机名。
希望这对您有所帮助。