首页 > 解决方案 > 使用 Nginx 和 SignalR 在 Linux 上托管 Asp.net Core

问题描述

我正在尝试使用 nginx 在 linux 上托管我的 asp.net 核心(.NET 5.0)。我的应用程序包含一个 SignalR 集线器。

我设法使托管与微软的默认配置一起工作:

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-5.0

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 核心网站,但我知道收到此错误: 在此处输入图像描述

幸运的是,微软让我掩护并建议我为 Nginx 配置此配置:

https://docs.microsoft.com/en-us/aspnet/core/signalr/scale?view=aspnetcore-5.0#linux-with-nginx

http {
  map $http_connection $connection_upgrade {
    "~*Upgrade" $http_connection;
    default keep-alive;
}

  server {
    listen 80;
    server_name example.com *.example.com;

    # Configure the SignalR Endpoint
    location /signalRHub {
      # App server url
      proxy_pass http://localhost:5000;

      # Configuration for WebSockets
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_cache off;

      # WebSockets were implemented after http/1.0
      proxy_http_version 1.1;

      # Configuration for ServerSentEvents
      proxy_buffering off;

      # Configuration for LongPolling or if your KeepAliveInterval is longer than 60 seconds
      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;
    }
  }
}

我尝试从 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
            });
...
}

在我的 Windows 开发机器上一切正常,但在 linux 和 nginx 配置上一切都崩溃了。

在 linux 上部署不是我想要的,但出于成本原因我坚持使用它。

提前感谢您的时间和帮助。

标签: c#linuxasp.net-corenginxsignalr

解决方案


推荐阅读