技术信息
$product = str_replace('®', '', utf8_encode($product));
IIS Manager Site Extension by shibayan
方案
我已在Azure Website
上实施了反向代理,但是接收服务器没有得到初始请求是否超过Azure Website
的任何指示。
我想要做的是通过自定义HTTPS
将初始请求中的HTTPS
标记从ON/OFF
发送到代理服务器。
理论
shibayan
的IIS Manager Site Extension
,我可以修改HTTP Header
文件,为其添加转换以插入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>
标记的位置......
尝试一次:
如this answer中所述。
<serverVariables>
结果:
HTTP错误500.50 - 网址重写模块错误。
不允许设置服务器变量“HTTP_X_USE_HTTPS”。加 服务器变量名称为允许的服务器变量列表。
尝试两个:
<?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
尝试三:
<?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 503
尝试四:
<?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>
的{{1}}文件中,有一些地方applicationHost.config
可以定义,例如在以下元素下:
Azure Website
<system.webServer>
...但是我尝试过这些组合无济于事。
问题
<configuration>
文件?<configuration><location>
的内容吗?答案 0 :(得分:5)
您必须使用以下内容在网站文件夹applicationHost.xdt
下创建d:\home\site\applicationHost.xdt
文件:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.webServer>
<rewrite>
<allowedServerVariables>
<add name="HTTP_X_USE_HTTPS" xdt:Transform="InsertIfMissing" />
</allowedServerVariables>
</rewrite>
</system.webServer>
</configuration>
现在您可以在web.config文件中使用新变量
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Proxy">
<serverVariables>
<set name="HTTP_X_USE_HTTPS" value="{HTTPS}"/>
</serverVariables>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
另请参阅 https://azure.microsoft.com/en-us/documentation/articles/web-sites-transform-extend/或https://github.com/projectkudu/kudu/wiki/Xdt-transform-samples