在Linux上使用Nginx托管带SignalR的ASP.NET Core 5应用报错求助
Nginx反向代理托管带SignalR的ASP.NET Core 5.0应用故障排查
背景说明
我正在尝试将基于.NET 5.0的ASP.NET Core应用部署在Linux系统上,通过Nginx反向代理托管,该应用包含一个SignalR Hub。所有功能在Windows开发环境下运行正常,但部署到Linux搭配Nginx后就出现故障,出于成本原因必须使用Linux部署,现需要排查问题。
初始配置情况
- 已按照微软官方默认配置完成基础托管
- 初始Nginx配置如下:
server { listen 80; server_name example.com *.example.com; location / { proxy_pass http://127.0.0.1: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-Forwarded-Proto $scheme; }}
- 初始配置下可以正常访问ASP.NET Core站点,但出现SignalR相关报错:

调整配置后的问题
- 参考微软官方SignalR部署文档调整Nginx适配配置,调整后配置如下:
http { map $http_connection $connection_upgrade { "~*Upgrade" $http_connection; default keep-alive; } server { listen 80; server_name example.com *.example.com; # 配置SignalR端点 location /signalRHub { # 应用服务地址 proxy_pass http://localhost:5000; # WebSockets相关配置 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_cache off; # WebSockets基于HTTP 1.1实现 proxy_http_version 1.1; # ServerSentEvents相关配置 proxy_buffering off; # LongPolling相关配置,若KeepAliveInterval超过60秒也需要配置 proxy_read_timeout 100s; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } }
- 尝试将调整后配置中的
proxy_pass值从http://localhost:5000修改为和初始配置一致的http://127.0.0.1:5000,依然没有解决问题,启动Nginx时抛出如下报错:
已配置的转发头信息
已在Startup类的Configure方法中添加如下转发头配置,不确定是否配置正确:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IStringLocalizer<Startup> localizer) { app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); ... }
内容的提问来源于stack exchange,提问作者R.Haughton
相关产品推荐
相关产品推荐

