OrchardCore OpenID /authorize经Nginx反向代理后重定向到HTTP而非HTTPS问题
问题根因
该问题是反向代理场景下的典型协议识别错误:OrchardCore 基于的 ASP.NET Core 框架未正确获取到客户端原始请求的 HTTPS 协议,生成重定向地址时误用了 Nginx 与后端服务之间通信的 HTTP 协议,再叠加 Nginx 侧的 HTTP 强制跳转 HTTPS 规则,就出现了两次跳转的现象。/openid-configuration 接口返回地址正确是因为该接口直接读取你配置的静态 BaseUrl 生成返回值,不依赖运行时的请求协议识别。
Nginx 侧配置修正
需要在对应站点的 location 配置块中添加完整的转发头规则,将客户端原始请求信息传递给后端服务:
location / { proxy_pass http://你的OrchardCore内网服务地址; # 以下为必须添加的转发头配置 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; }
OrchardCore 侧配置修正
必须开启 OrchardCore 自带的反向代理头解析支持,有两种配置方式可选:
- 配置文件方式(无需修改代码,推荐):在站点根目录的
appsettings.json中添加如下配置:
{ "OrchardCore": { "OrchardCore_ReverseProxy": { "EnableXForwardedFor": true, "EnableXForwardedHost": true, "EnableXForwardedProto": true, "ForwardedHeaders": "All", "KnownProxies": [ "填写你的Nginx服务器的内网IP地址" ] } } }
- 代码编译方式:如果你是自行编译部署 OrchardCore,可以在
Program.cs中显式注册转发头中间件,注意必须放在其他中间件注册逻辑之前:
builder.Services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost; // 测试环境可临时清空信任代理列表,生产环境必须明确添加你的反向代理IP,避免伪造请求头风险 options.KnownProxies.Clear(); }); app.UseForwardedHeaders();
验证项
- 确认 OrchardCore 管理后台「配置→常规」中设置的 BaseUrl 是完整的 HTTPS 地址,没有遗漏协议头
- 确认 OpenID Connect 模块的 Authority 配置同样为完整的 HTTPS 地址
配置完成后所有内部生成的重定向地址都会统一使用客户端原始请求的 HTTPS 协议,不会再出现 HTTPS 跳转 HTTP 的问题,silent_renew 流程的混合内容拦截问题也会同步解决。
内容的提问来源于stack exchange,提问作者Ivan Lukic
相关产品推荐
相关产品推荐

