禁用SSL时将.NET 5+SignalR应用部署至IIS预生产服务器的异常问题求助
我来帮你梳理几个不用配置SSL证书也能尝试的解决方向,这些都是实际排查中常见的“隐藏坑”:
检查应用配置文件的强制HTTPS设置
打开appsettings.Production.json(或者服务器上生效的配置文件),看看有没有以下可能强制HTTPS的配置:- 是否设置了
"ASPNETCORE_FORWARDEDHEADERS_ENABLED": "true"但没有正确配置转发头,导致应用误判当前请求为HTTPS; - 检查Kestrel的端点配置,有没有硬编码HTTPS端口(比如
"Urls": "https://*:5001"),如果有,改成仅HTTP的配置("Urls": "http://*:5000"); - 确认是否存在其他自定义中间件或者第三方库在强制跳转HTTPS,有些身份验证库可能默认开启HTTPS要求。
- 是否设置了
排查IIS站点的重写规则与绑定
- 打开IIS管理器,找到你的站点,检查URL重写模块,看看是否存在强制跳转HTTPS的规则(比如把HTTP请求重定向到HTTPS),如果有暂时禁用它;
- 确认站点的绑定设置,只保留HTTP(80端口)的绑定,删除任何残留的HTTPS绑定,避免IIS层面强制跳转。
修复静态资源的硬编码HTTPS引用
登录页控制台的ERR_SSL_PROTOCOL_ERROR大概率是因为JS/CSS文件的链接被硬编码成了https://开头(比如开发时写死了https://localhost/xxx.css),部署后没有改为相对路径或者适配当前协议的路径。检查页面源码中的资源引用,改成相对路径(比如/css/xxx.css)或者用协议相对路径(//your-domain/css/xxx.css)。调整SignalR前端连接配置
前端的SignalR Hub连接如果硬编码了HTTPS地址(比如new HubConnectionBuilder().withUrl("https://your-domain/hub")),会导致连接失败。改成相对路径的写法,让浏览器自动适配当前协议:const connection = new signalR.HubConnectionBuilder() .withUrl("/chatHub") // 用相对路径,自动用当前HTTP协议 .build();清除服务器与浏览器的缓存
- 服务器端:重启IIS站点和应用池,确保新的配置生效;
- 浏览器端:用无痕模式访问,或者清除缓存和Cookie,避免浏览器缓存了之前的HTTPS跳转规则。
检查服务器环境变量
在服务器上检查ASP.NET Core相关的环境变量,比如是否设置了ASPNETCORE_HTTPS_PORT、ASPNETCORE_URLS等强制HTTPS的变量,这些变量会覆盖应用代码中的设置,可以通过IIS的“配置编辑器”或者系统环境变量面板查看并移除。
内容的提问来源于stack exchange,提问作者Shpend Palushi

