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

Nginx反向代理IIS跳转异常求助:跳转地址缺失端口

问题分析与解决方案

问题出在Nginx配置,核心原因是转发请求时传递的Host头未包含端口,导致.NET Core后端生成跳转链接时丢失了端口号。

原因说明

当访问z://www.aaa.com/iis2002时,Nginx将请求转发至z://www.aaa.com:2002,但配置中proxy_set_header Host $host传递的Host值仅为www.aaa.com(不带端口)。.NET Core站点接收请求后,生成跳转链接(如重定向到index.html)会以Host头的值作为域名部分,最终跳转地址变成z://www.aaa.com/index.html,而非预期的带端口地址。

修复配置

修改Nginx中location /iis2002的配置,调整Host头并优化路径传递逻辑:

location /iis2002/ {     
    proxy_pass z://www.aaa.com:2002/;
    proxy_set_header Host $host:2002;
    proxy_set_header X-Real-IP $remote_addr;
    # 传递转发头,帮助.NET Core识别真实请求地址
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host:2002;
}

关键调整点:

  • location /iis2002/与proxy_pass末尾加斜杠:确保/iis2002/xxx这类请求能正确转发到后端的/xxx,避免路径拼接错误。
  • proxy_set_header Host $host:2002:显式指定带端口的Host头,让.NET Core后端生成跳转链接时包含端口号。
  • 添加X-Forwarded-*头:帮助.NET Core站点识别真实的外部请求协议和主机地址,保证所有生成的URL符合预期。

额外优化(.NET Core端)

如果站点部署在IIS上,建议在项目中启用ForwardedHeaders中间件,确保应用正确处理反向代理传递的头信息。在Program.cs中添加以下代码:

builder.Services.AddForwardedHeaders(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost;
    options.KnownProxies.Add(IPAddress.Parse("127.0.0.1")); // 信任本地Nginx代理
});

// 需在app.UseRouting()之前调用
app.UseForwardedHeaders();

此配置让.NET Core完全信任Nginx传递的转发头,进一步确保生成的URL包含正确的端口和协议。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:07:54