我正在尝试创建 IIS 服务器场,但 URL 重写无法正常工作时遇到问题。
Windows 10 企业版 IIS 10
以下是相关配置。
<applicationPools>
<add name="always-blue" autoStart="true">
<processModel pingingEnabled="true" pingResponseTime="00:01:30" />
</add>
<add name="always-green" autoStart="true">
<processModel pingingEnabled="true" pingResponseTime="00:01:30" />
</add>
</applicationPools>
<sites>
<site name="always-blue" id="2" serverAutoStart="true">
<application path="/" applicationPool="always-blue">
<virtualDirectory path="/" physicalPath="C:\xxx\always-up-blue" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:alwaysup-blue" />
</bindings>
</site>
<site name="always-green" id="3" serverAutoStart="true">
<application path="/" applicationPool="always-green">
<virtualDirectory path="/" physicalPath="C:\xxx\always-up-green" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:alwaysup-green" />
</bindings>
</site>
</sites>
<rewrite>
<globalRules>
<rule name="alwaysup rewrite" stopProcessing="false">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^alwaysup$" />
<add input="{SERVER_PORT}" pattern="^80$" />
</conditions>
<action type="Rewrite" url="http://alwaysup/{R:0}" />
</rule>
</globalRules>
</rewrite>
http://alwaysup-blue 和 http://always-green 网站均已启动且工作正常。但是服务器场不起作用。 http://alwaysup -> 返回 502。我用 FailTracedURLs 检查了日志,但无法理解这一点。这是日志..
跟踪警告:REWRITE_DISABLED_KERNEL_CACHE
此警告表示:如果重写规则集使用列表中未提及的任何服务器变量,则该规则集被认为对于输出缓存不安全。这意味着 URL 重写模块将禁用所有请求的内核模式缓存,无论请求 URL 是否被重写。请参阅:与 IIS 输出缓存交互
但我不认为这个警告是502错误的根本原因,问题应该出在你的部署过程中。我按照教程在IIS中使用蓝绿部署,没有出现错误。您可以按照此链接中的步骤尝试重新部署:如何在 IIS 中使用蓝绿部署。
<webFarms>
<webFarm name="alwaysup" enabled="true">
<server address="alwaysup-blue" enabled="true">
<applicationRequestRouting hostName="alwaysup-blue" httpPort="8081" />
</server>
<server address="alwaysup-green" enabled="true">
<applicationRequestRouting hostName="alwaysup-green" httpPort="8082" />
</server>
<applicationRequestRouting>
<healthCheck url="http://alwaysup/up.html" responseMatch="up" />
<loadBalancing />
<protocol preserveHostHeader="false">
<cache enabled="true" validationInterval="00:01:00" />
</protocol>
</applicationRequestRouting>
</webFarm>
必须将preserveHostHeader添加到配置的webfarm部分。