CentOS7下Apache反向代理.NET Core API HTTPS访问失败问题求助
修复方案
核心问题定位
你遇到的报错本质是两个配置错误:
- Apache的443端口虚拟主机没有配置SSL证书及相关SSL参数,无法正常处理HTTPS请求
- 反向代理不需要转发到.NET Core的本地HTTPS 5001端口,本地走HTTP协议转发到5000端口即可,反而会避免本地自签名证书校验的问题
具体操作步骤
1. 修改Apache配置
将你的443端口虚拟主机配置替换为以下内容,注意替换证书路径为你实际的证书存放路径:
<VirtualHost *:443> # 启用SSL并配置证书 SSLEngine on SSLCertificateFile /你的证书路径/域名.crt SSLCertificateKeyFile /你的证书路径/域名.key # 如有证书链文件就添加下面这行,没有可以删除 SSLCertificateChainFile /你的证书路径/证书链.crt ProxyPreserveHost On # 配置转发头,让.NET Core可以识别请求的原始协议 RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s RequestHeader set X-Forwarded-Proto https # 本地反向代理走HTTP到5000端口即可,不需要走HTTPS ProxyPass / http://127.0.0.1:5000/ ProxyPassReverse / http://127.0.0.1:5000/ ServerName api.domain.com ServerAlias *.domain.com ErrorLog /var/log/apache2/api_error CustomLog /var/log/apache2/api_access common </VirtualHost>
2. 调整.NET Core服务配置
修改.NET Core项目的Startup.cs文件,添加反向代理头支持,同时关闭HTTPS强制跳转:
public void ConfigureServices(IServiceCollection services) { // 原有服务注册代码保留,新增以下转发头配置 services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; options.KnownProxies.Add(IPAddress.Parse("127.0.0.1")); }); // 其他原有配置不变 } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 把转发头中间件放在所有中间件的最前面 app.UseForwardedHeaders(); // 注释或删除下面这行HTTPS跳转代码,HTTPS卸载已经交给Apache处理 // app.UseHttpsRedirection(); // 剩余原有配置保持不变 }
同时修改.NET Core的启动配置,只保留本地127.0.0.1:5000的HTTP监听,关闭5001端口的HTTPS监听。
3. 重启服务生效
执行以下命令重启相关服务:
# 重启Apache服务 systemctl restart httpd # 替换成你实际的.NET Core服务名,重启.NET Core服务 systemctl restart 你的.NET Core服务名称
4. 验证
直接访问https://api.domain.com/你的接口路径即可正常访问,不需要加端口号。
内容的提问来源于stack exchange,提问作者Manasseh
相关产品推荐
相关产品推荐

