c# - 使用 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;
}}
幸运的是,微软让我掩护并建议我为 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;就像在第一个例子中没有成功一样。
我也已将此添加到我的 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 上部署不是我想要的,但出于成本原因我坚持使用它。
提前感谢您的时间和帮助。