【发布时间】:2016-06-08 15:27:29
【问题描述】:
技术信息
Azure Website- 已安装
IIS Manager Site Extension by shibayan
场景
我已经在我的Azure Website 上实现了一个反向代理,但是接收服务器没有得到任何关于初始请求是否超过HTTPS 的指示。
我想要做的是通过自定义 HTTP Header 将 ON/OFF 的 HTTPS 标志从初始请求发送到代理服务器。
理论上
- 使用
shibayan的IIS Manager Site Extension,我可以编辑applicationHost.xdt文件,给它一个转换来插入一个<allowedServerVariables>标签,这应该允许我设置一个自定义HTTP Header。
实践中
我已经这样配置了我的重写规则:
<rule name="Proxy" stopProcessing="true" xdt:Transform="Replace" xdt:Locator="Match(name)">
...
<serverVariables>
<set name="HTTP_X_USE_HTTPS" value="{HTTPS}" />
</serverVariables>
...
</rule>
并尝试了几种将<serverVariables>标签放在哪里的组合...
尝试一:
如this answer 中所述。
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.webServer>
<proxy enabled="true" preserveHostHeader="false" reverseRewriteHostInResponseHeaders="false" xdt:Transform="Insert" />
<rewrite>
<allowedServerVariables>
<add name="HTTP_X_USE_HTTPS" xdt:Transform="Insert" />
</allowedServerVariables>
</rewrite>
</system.webServer>
</configuration>
结果:
HTTP 错误 500.50 - URL 重写模块错误。
不允许设置服务器变量“HTTP_X_USE_HTTPS”。添加 将服务器变量名添加到允许的服务器变量列表中。
尝试二:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<location path="~1[app service name]" overrideMode="Allow">
<system.webServer>
<proxy enabled="true" preserveHostHeader="false" reverseRewriteHostInResponseHeaders="false" xdt:Transform="Insert" />
<rewrite>
<allowedServerVariables>
<add name="HTTP_X_USE_HTTPS" xdt:Transform="Insert" />
</allowedServerVariables>
</rewrite>
</system.webServer>
</location>
</configuration>
结果:HTTP 500.50
尝试三:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<location path="" overrideMode="Allow">
<system.webServer>
<proxy enabled="true" preserveHostHeader="false" reverseRewriteHostInResponseHeaders="false" xdt:Transform="Insert" />
<rewrite>
<allowedServerVariables>
<add name="HTTP_X_USE_HTTPS" xdt:Transform="Insert" />
</allowedServerVariables>
</rewrite>
</system.webServer>
</location>
</configuration>
结果:HTTP 503
尝试四:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<location path="[app service name]" overrideMode="Allow">
<system.webServer>
<proxy enabled="true" preserveHostHeader="false" reverseRewriteHostInResponseHeaders="false" xdt:Transform="Insert" />
<rewrite>
<allowedServerVariables>
<add name="HTTP_X_USE_HTTPS" xdt:Transform="Insert" />
</allowedServerVariables>
</rewrite>
</system.webServer>
</location>
</configuration>
结果:HTTP 503
我知道在Azure Website 的applicationHost.config 文件中,有几个地方可以定义<system.webServer>,例如在以下元素下:
<configuration><configuration><location>
...但是我尝试了这些组合无济于事。
问题
- 还有其他可能的位置吗?
- 我是否以任何方式错误配置了我的
.xdt文件? - 我的
applicationHost.config是否遗漏了什么?
【问题讨论】:
标签: azure iis url-rewriting reverse-proxy