【问题标题】:SignalR in ASP.NET Core behind NginxNginx 背后的 ASP.NET Core 中的 SignalR
【发布时间】:2018-06-26 06:51:17
【问题描述】:

我有一个带有 ubuntu 16.04、kestrel 和 nginx 的服务器作为代理服务器,它重定向到我的应用所在的本地主机。我的应用程序在 Asp.Net Core 2 上。我正在尝试添加推送通知并使用 SignalR 核心。在 localhost 上一切正常,在带有 iis 和 windows 的免费主机上也是如此。但是当我在 linux 服务器上部署我的应用程序时出现错误:

signalr-clientES5-1.0.0-alpha2-final.min.js?v=kyX7znyB8Ce8zvId4sE1UkSsjqo9gtcsZb9yeE7Ha10:1 WebSocket 连接到 'ws://devportal.vrweartek.com/chat?id=210fc7b3-e880-4d0e-b2d1-a37a9a982c33' 失败:WebSocket 握手期间出错:意外的响应代码: 204

但只有当我通过我的站点名称从不同的机器请求我的站点时才会发生此错误。当我通过 localhost:port 从服务器请求站点时,一切都很好。所以我认为nginx存在问题。我read 我需要配置它以使用在信号器中用于建立连接的 websockets,但我没有成功。可能只是一些愚蠢的错误?

【问题讨论】:

  • 您找到解决问题的方法了吗?我也遇到了这个问题。
  • 也许你的问题是在预渲染阶段。你启用了吗?

标签: nginx asp.net-core signalr


【解决方案1】:

我能够通过使用 $http_connection 而不是 keep-alive 或升级来解决这个问题

server {
  server_name example.com;

  location / {
    proxy_pass http://localhost:5000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

我这样做是因为 SignalR 还尝试对我的集线器使用 POST 和 GET 请求,因此仅在单独的服务器配置中升级到连接是不够的。

【讨论】:

  • 不确定这对安全性的影响。如果有人对此有任何想法,请告诉我。
  • 这也解决了我的情况。其他不针对集线器的请求在没有连接升级的情况下仍然存在
  • FWIW,微软现在确实有 Configure NginxLinux with Nginx 的文档来描述这些。
【解决方案2】:

问题是nginx配置文件。如果您使用的是 ASP.NET Core 部署指南的默认设置,那么问题出在代理标头之一。 WebSocket 需要连接标头作为“升级”。

您必须在 nginx 配置文件中为 SignalR Hub 设置新路径。

比如

location /api/chat {
    proxy_pass http://localhost:5000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

你可以阅读我的完整博文

https://medium.com/@alm.ozdmr/deployment-of-signalr-with-nginx-daf392cf2b93

【讨论】:

  • 这不正是他所说的吗?
  • 我遇到了和他说的一样的问题,这就是解决方案。也许,他在做的时候犯了错误。
  • “升级”和“升级”之间的文本大小写区别在这里重要吗?抱歉,我还没有设置好 ngnix,但访问了这里以查看我在设计解决方案时需要注意的问题。
  • 我不这么认为。你可以同时使用
猜你喜欢
  • 2019-11-28
  • 2018-12-07
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多