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

如何修正Nginx反向代理ASP.NET Core应用的HTTPS重定向端口问题

解决方案

问题出在你的ASP.NET Core应用无法感知外部请求是通过HTTPS(Nginx的443端口)进入的,所以app.UseHttpsRedirection()会默认重定向到自身的HTTPS端口5001。需要从Nginx传递正确的转发头,并让ASP.NET Core信任这些头来修正重定向目标。

1. 修正Nginx配置

首先清理重复的location /块,启用转发协议头,并补充SSL证书配置(listen 443 ssl必须指定证书文件):

# 处理HTTP请求,强制跳转到HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name myServername;
    return 301 https://$host$request_uri;
}

server {
    listen [::]:443 ssl default_server;
    listen 443 ssl default_server;

    server_name myServername;

    # 替换为你的SSL证书实际路径
    ssl_certificate /path/to/your/certificate.crt;
    ssl_certificate_key /path/to/your/private.key;

    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Real-IP $remote_addr;
        # 关键:告诉ASP.NET请求的真实协议是HTTPS
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

2. 配置ASP.NET Core信任转发头

在Program.cs中添加ForwardedHeaders中间件,必须放在UseHttpsRedirection和UseHsts之前,让应用信任来自本地Nginx的转发信息:

var builder = WebApplication.CreateBuilder(args);

// 添加你的服务配置...

var app = builder.Build();

// 配置转发头,信任本地代理
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
    // 允许来自localhost的转发(Nginx运行在本地服务器)
    KnownProxies = { IPAddress.Parse("127.0.0.1"), IPAddress.Parse("::1") }
});

// 保持原有中间件顺序不变
app.UseHttpsRedirection();
app.UseHsts();
app.UseStaticFiles();
app.UseRouting();
// ...其他中间件配置

app.Run();

3. 重启服务

保存配置后,重启Nginx和ASP.NET Core应用:

sudo systemctl restart nginx
sudo systemctl restart your-aspnet-app-service # 替换为你的应用服务名称

原理说明

  • X-Forwarded-Proto头会告诉ASP.NET Core外部请求使用的是HTTPS协议,因此UseHttpsRedirection会生成指向https://myServername:443的重定向,而非应用自身的5001端口。
  • ForwardedHeaders中间件让应用信任来自Nginx的转发信息,避免因忽略这些头导致的协议判断错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:45:56