You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IIS中{SERVER_NAME}无法返回主机名的问题排查与修复请求

IIS URLRewrite {SERVER_NAME} 取值异常问题排查与解决

一、IIS中{SERVER_NAME}的取值逻辑

IIS对{SERVER_NAME}的取值遵循以下优先级:

  1. 优先使用当前请求匹配的站点绑定主机名(若网站绑定了特定主机名);
  2. 若站点绑定为“全部未分配”,则读取请求的Host:头值;
  3. 同时受IIS服务器运行时配置UseHostName控制:
    • 当UseHostName=false(默认值):忽略请求Host头,使用服务器实际主机名;
    • 当UseHostName=true:强制使用请求的Host头作为{SERVER_NAME}。

二、问题根因分析

你遇到的情况核心是{SERVER_NAME}现在取到了负载均衡别名test-server(来自请求Host头),而非服务器自身FQDN,可能的触发原因:

  • 站点绑定变更:原本网站绑定的是服务器自身FQDN,后续被修改为“全部未分配”或绑定了test-server别名;
  • UseHostName配置被修改:该配置被设置为true,导致IIS强制读取Host头;
  • 运维操作变更:比如负载均衡侧调整了请求转发的Host头传递规则,或服务器主机名相关配置被修改。

三、解决方法

方法1:修改站点绑定,指定服务器自身FQDN

  1. 打开IIS管理器,定位到目标网站,右键选择「编辑绑定」;
  2. 新增或修改HTTPS绑定,将主机名设置为服务器实际FQDN(如mqa907b422x.testing.com);
  3. 确保绑定使用的SSL证书与该FQDN匹配;
  4. 保存配置后,{SERVER_NAME}将自动取绑定的主机名,即服务器自身FQDN。

方法2:修改IIS运行时配置,强制使用服务器主机名

以管理员身份打开命令提示符,执行以下命令(替换你的网站名称为实际站点名):

appcmd set config "你的网站名称" /section:system.webServer/serverRuntime /useHostName:False

该命令将强制IIS忽略请求Host头,使用服务器自身主机名作为{SERVER_NAME}的值。

方法3:直接在规则中硬编码服务器FQDN

如果负载均衡集群中每台服务器的FQDN固定,可直接替换规则中的{SERVER_NAME}为实际FQDN:

<rule name="WebSocket" enabled="true" stopProcessing="true">
  <match url="wsapp/(.*)" />
  <action type="Redirect" url="https://mqa907b422x.testing.com:7899/{R:1}" redirectType="Temporary" />
</rule>

此方法简单直接,但需为集群中每台服务器单独配置对应规则。

四、验证方法

可在网站中添加测试页面,输出SERVER_NAME变量确认取值:

  • ASP.NET页面:
    <%= Request.ServerVariables["SERVER_NAME"] %>
    
  • PHP页面:
    <?php echo $_SERVER['SERVER_NAME']; ?>
    

内容的提问来源于stack exchange,提问作者Hoshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 15:32:48