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

在Apache部署ASP.NET Core应用后URL显示端口问题求助

问题:ASP.NET Core部署在Apache后,HTTPS重定向带端口5001

我已将ASP.NET Core网站部署在Apache服务器上,目前遇到的问题是浏览器URL中会显示端口,即实际显示为https://mywebsite.com:5001/,而非预期的https://mywebsite.com。

我的Kestrel配置了两个端口:

"Kestrel": {
  "Endpoints": {
    "MyHttpEndpoint": {
      "Url": "http://localhost:5000"
    },
    "MyHttpsEndpoint": {
      "Url": "https://localhost:5001"
    }
  }
}

同时在program.cs中添加了重定向中间件:

app.UseHttpsRedirection();

应用运行正常,但访问mywebsite.com时,浏览器自动跳转到带5001端口的地址,Chrome网络面板显示重定向至https://mywebsite.com:5001。我的Apache虚拟主机配置如下:

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/
    ServerName mywebsite.com
    ServerAlias *.mywebsite.com
    ErrorLog C:/xampp/apache/logs/error.log
    #CustomLog C:/xampp/apache/logs/access.log
</VirtualHost>

<VirtualHost *:443>
    Protocols             h2 http/1.1
    ProxyPreserveHost     On
    ProxyPass             / http://127.0.0.1:5000/
    ProxyPassReverse      / http://127.0.0.1:5000/
    ServerName            mywebsite.com
    ServerAlias           *.mywebsite.com
    ErrorLog              C:/xampp/apache/logs/error.log
    #CustomLog             C:/xampp/apache/logs/access.log
    SSLEngine             on
    SSLProtocol           all -SSLv3 -TLSv1 -TLSv1.1
    SSLHonorCipherOrder   off
    SSLCompression        off
    SSLSessionTickets     on
    SSLUseStapling        off
    SSLCertificateFile    C:/xampp/htdocs/aspnetcore/server.crt
    SSLCertificateKeyFile C:/xampp/htdocs/aspnetcore/server.key
    SSLCipherSuite        ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
</VirtualHost>
解决方案

核心原因

UseHttpsRedirection中间件默认读取Kestrel配置的HTTPS端口(此处为5001)生成重定向地址,但Apache作为反向代理已处理HTTPS(443端口),ASP.NET Core无法感知外部请求的实际端口,因此返回带5001的重定向地址。

修复步骤

1. 配置Apache传递代理头信息

在两个Apache虚拟主机配置中添加代理头,告知ASP.NET Core外部请求的协议和端口:

80端口虚拟主机修改后:

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/
    # 添加代理头
    RequestHeader set X-Forwarded-Proto "http"
    RequestHeader set X-Forwarded-Port "80"
    ServerName mywebsite.com
    ServerAlias *.mywebsite.com
    ErrorLog C:/xampp/apache/logs/error.log
    #CustomLog C:/xampp/apache/logs/access.log
</VirtualHost>

443端口虚拟主机修改后:

<VirtualHost *:443>
    Protocols             h2 http/1.1
    ProxyPreserveHost     On
    ProxyPass             / http://127.0.0.1:5000/
    ProxyPassReverse      / http://127.0.0.1:5000/
    # 添加代理头
    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-Forwarded-Port "443"
    ServerName            mywebsite.com
    ServerAlias           *.mywebsite.com
    ErrorLog              C:/xampp/apache/logs/error.log
    #CustomLog             C:/xampp/apache/logs/access.log
    SSLEngine             on
    SSLProtocol           all -SSLv3 -TLSv1 -TLSv1.1
    SSLHonorCipherOrder   off
    SSLCompression        off
    SSLSessionTickets     on
    SSLUseStapling        off
    SSLCertificateFile    C:/xampp/htdocs/aspnetcore/server.crt
    SSLCertificateKeyFile C:/xampp/htdocs/aspnetcore/server.key
    SSLCipherSuite        ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
</VirtualHost>

2. 让ASP.NET Core信任代理头

在program.cs中添加转发头配置,确保应用信任Apache传递的代理信息:

builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = 
        ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedPort;
    // 允许本地回环地址作为代理(Apache在本机)
    options.KnownProxies.Add(IPAddress.Parse("127.0.0.1"));
});

并在UseHttpsRedirection之前启用转发头:

var app = builder.Build();

// 必须在UseHttpsRedirection之前调用
app.UseForwardedHeaders();

app.UseHttpsRedirection();
// 其他中间件配置...

3. 可选:显式指定HTTPS重定向端口

若上述配置仍未解决问题,可直接在program.cs中指定重定向端口为443:

builder.Services.AddHttpsRedirection(options =>
{
    options.HttpsPort = 443;
});

验证

修改配置后,重启Apache和ASP.NET Core应用,访问http://mywebsite.com应自动重定向至https://mywebsite.com,不再显示5001端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:07:21