分享程式代碼相關筆記
目前文章總數:172 篇
最後更新:2025年 03月 22日
Nginx 需要明確設定 WebSocket 代理,因此將 Asp.net Core 的 SignalR 程式部署到 Ubuntu 主機上並用 Nginx 代理
會出現以下錯誤
※本篇使用這個:範例代碼
Nginx 本身不會自動轉發 WebSockets,因此需要手動設定 Nginx 的 .conf 檔案以下參數:
proxy_set_header Upgrade $http_upgrade; |
proxy_set_header Connection “Upgrade”; |
並且明確指示 SignalR 的 Hub Proxy 轉發位置
將以下的 Proxy 配置到 Nginx 的 .conf 檔案上,增加 UpdateHub
upstream backend {
ip_hash;
server localhost:6001;
server localhost:6002;
}
server {
listen 6055;
location / {
proxy_pass http://backend;
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;
}
location /UpdateHub {
proxy_pass http://backend/;
proxy_http_version 1.1;
proxy_set_header Host $host:$server_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_redirect off;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
完成後,重啟 Nginx 服務器,輸入以下:
systemctl restart nginx
可以發現 SignalR 已可以正常連線,並且經過 Nginx Proxy
若使用此範例代碼需啟動 Redis
※因為是 Redis Backplane
並且需確保專案已經啟動,並且經過 Nginx代理 才能重現此問題
IIS 內建支援 WebSocket,並且 .NET Core 在 Windows 環境下可以自動處理 WebSockets 的 Upgrade 請求。
※因此 Nginx 需要手動設定轉發 Host 設定 proxy_set_header Upgrade $http_upgrade;
先從 Visual Studio 發布檔案,然後從 IIS 上進行新增站台 -> 配置 Port
但 IIS 直接啟動,有可能出現以下錯誤 500.19 錯誤,這是因為 Asp.net Core 需要安裝 Host
.net Core 的程式要能在 IIS 執行,需要安裝官方相依套件,進入 Microsoft 相依套件頁面
-> 選擇 dotnet-hosting (依照自己的版本選擇,本篇是 dotnet core 8.0)
下載後,點及執行,並且安裝
接著 IIS 要設定應用程式集區,配置如下,沒有受控式(會自動依賴 dotnet-hosting)
最後就能順利開啟 IIS 上佈署的網站,並且 IIS 內建支援 WebSocket ,所以 SignalR 的 Hub 不用額外處理