使用Application Request Routing时部分站点返回HTTP 404问题求助
排查ARR负载均衡后返回404的问题
我来帮你一步步排查这个ARR负载均衡返回404的问题——你已经做了不少基础排查,咱们从几个容易忽略的关键点入手:
1. 确认URL重写规则的路径转发完整性
ARR的核心是通过URL重写把请求转发到后端服务器,最常见的404原因就是转发时丢失了请求路径。你可以检查重写规则的action配置,确保转发URL包含完整的请求路径:
- 打开IIS管理器的URL重写模块,找到你创建的规则,查看“操作”部分的“重写URL”是否包含
{REQUEST_URI},比如正确的格式应该是:
这里的http://{SERVER_POOL_NAME}{REQUEST_URI}{SERVER_POOL_NAME}是你的服务器场名称,{REQUEST_URI}会保留原始请求的完整路径(比如/home/index),如果只写服务器地址而不带路径,后端服务器会收到根路径请求,自然返回404。
2. 检查后端站点的主机头绑定
如果ARR转发请求时的主机头和后端站点的绑定不匹配,后端IIS会找不到对应的站点,直接返回404:
- 登录
<test-server-name>.de服务器,打开IIS管理器,找到你的ASP.NET站点,查看“绑定”设置。如果ARR转发过来的请求主机头是你本地测试的域名(比如你在浏览器访问的是localhost或者本地自定义域名),而后端站点只绑定了<test-server-name>.de,那必须在后端站点的绑定里添加这个本地测试的主机头,或者在ARR服务器场的“服务器属性”中,设置“主机头”为后端站点已绑定的域名。
3. 验证请求的协议一致性
如果本地测试用的是HTTP,而后端站点强制HTTPS(或者反过来),也会导致转发失败:
- 打开ARR服务器场的“SSL设置”,根据你的场景选择:如果后端是HTTPS,启用“启用SSL卸载”(让本地IIS处理SSL,转发给后端HTTP)或者“传递SSL证书”(直接转发HTTPS请求);同时确保URL重写规则里的转发URL协议和后端一致(http/https)。
4. 查看后端服务器的请求日志
本地的Failed Request Tracing只能看到请求在本地IIS的处理过程,要知道后端为什么返回404,必须看后端服务器的站点日志:
- 登录
<test-server-name>.de服务器,打开IIS管理器,找到站点的“日志”功能,查看最新的请求记录,重点看cs-uri-stem(请求路径)、cs-host(主机头)、sc-status(状态码),这样能直接定位是路径错误、主机头不匹配,还是资源确实不存在。
5. 确认后端站点的默认文档和资源存在
有时候看似路径正确,但后端站点没有设置默认文档(比如default.aspx、index.html),或者请求的资源确实不存在:
- 直接在
<test-server-name>.de服务器上访问站点的完整路径(比如http://localhost/home/index),确认能正常返回内容,排除后端站点自身的问题。
6. 检查ARR代理的主机头转发设置
在ARR的“代理设置”(IIS管理器 -> 服务器节点 -> Application Request Routing Cache -> 服务器代理设置)里,确保“重写主机头”选项设置正确:
- 如果需要保留原始请求的主机头,选择“使用原始请求中的主机头”;如果需要强制使用后端站点的主机头,选择“使用下列主机头”并填写后端的域名。
内容的提问来源于stack exchange,提问作者ysfaran




