web-dev-qa-db-ja.com

Nginxの背後にあるASP.NET CoreのSignalR

アプリがあるローカルホストにリダイレクトするプロキシサーバーとして、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「ws://devportal.vrweartek.com/chat?id = 210fc7b3-e880-4d0e-b2d2a33a9a2a1a3a9a3a9a3a9a3a9a9a3a9a3a9a3a9a3a9a3a9a3a9a3a9a3a9a9a3a9a3a9a3a9a3a9a3a9a3a9a3a9a3a9a3a3a9a3a9a3a3a9a3a3a7a3aa3a7aa3aa3a7a3aa7a3aa7であることへのWebSocket接続:WebSocketハンドシェイク中のエラー:予期しない応答コード:204

しかし、このエラーは、サイト名を使用して別のマシンからサイトをリクエストした場合にのみ発生します。そして、私がlocalhost:portを介してサーバーにサイトをリクエストすると、すべてうまくいきます。だから私はnginxに問題があると思います。私は read を使用して、接続を確立するためのシグナルで使用されるWebSocketを操作するように構成する必要がありますが、成功しませんでした。ただのばかげた間違いがあるのでしょうか?

enter image description here

13
Artyom

問題はnginx設定ファイルです。 ASP.NET Core導入ガイドのデフォルト設定を使用している場合、問題はプロキシヘッダーの1つです。 WebSocketでは、「アップグレード」として接続ヘッダーが必要です。

Nginx構成ファイルでSignalRハブの新しいパスを設定する必要があります。

といった

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-daf392cf2b9

13
alim

キープアライブやアップグレードの代わりに$ http_connectionを使用することでこれを解決できました

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リクエストを使用しようとしていたため、別のサーバー構成で接続をアップグレードするだけでは不十分でした。

10
trit