我有一個簡單的后端Kotlin應用程式,在谷歌云虛擬機上運行Netty服務器。它接收websocket連接并向客戶發送一些簡單的訊息。我還在同一臺機器上運行nginx服務器,它監聽443埠并將請求重定向到我的應用程式(127.0.0.1:8080)。下面是nginx的配置:
server {
listen 443 ssl;
server_name www.mydomain.com。
ssl_certificate /etc/nginx/certs/my-cert.crt。
ssl_certificate_key /etc/nginx/certs/my-key.key。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_read_timeout 86400;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host。
}
}
配置中的SLA證書是有效的,并且由真正的CA認證。
現在我想寫一個簡單的前端Angular應用程式,連接到我的代理:
我想寫一個簡單的前端Angular應用程式。
return webSocket({
url: `wss://www.mydomain.com/${path}`。
closeObserver。{
next: (event: CloseEvent) => { console.log(event) }
}
}).multiplex(() => {}, () => {}, () => true)
我正在訂閱由該方法回傳的Observable,并列印傳入的訊息。
所有這些在每個瀏覽器中都運行良好,除了 Google Chrome。(我試過Firefox、Opera、Chromium、Edge)。) 此外,一切都在chrome擴展Smart Websocket Client中運行。它甚至在Chrome的隱身模式下作業正常,但在普通模式下失敗。
在chrome上我得到
WebSocket連接到'wss://mydomain.com/something'失敗。
我記錄的CloseEvent并沒有什么幫助,它只是說代碼是1006,欄位reason是空的。
當我繞過代理并直接使用ws://www.mydomain.com:8080/something連接到我的應用程式時,它在 chrome 上運行良好。
我猜想我的nginx配置出了問題,但我真的不知道是什么。所有為websockets配置nginx的指南都說它應該這樣配置。
我花了2天時間搜索這方面的資訊,但沒有找到任何真正的答案,不知道為什么會發生這種情況,以及我能做些什么來解決它。
有人知道為什么會發生這種情況嗎?
更新。 這里還有一件有趣的事情。我寫了一個簡單的腳本,連接到我的代理,就像我的Angular應用程式,但使用標準的api。
let ws = new WebSocket("wss://mydomain.com/something")。
ws.onmessage = (ev) => {
console.log(ev.data)。
document.getElementById("result").innerHTML = ev.data
};
ws.onerror = (err) => { console.log(ev.data)
console.log(err)
}
當我在chrome中使用file://打開這個檔案時,一切正常。它連接到我的ws服務器并在螢屏上列印傳入的資訊。但是當我運行本地Apache服務器并在localhost:80上提供相同的檔案時,我在Chrome中得到了與之前相同的錯誤。(當檔案通過localhost訪問時,其他瀏覽器和Incognito模式仍然作業正常)
所以這個問題與Angular沒有太大關系。
uj5u.com熱心網友回復:
你提到在私有/隱身模式下可以作業,你是否嘗試過禁用所有的擴展程式并連接到websocket?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/311304.html
標籤:
上一篇:navigator.maxTouchPoints=256ondesktop
下一篇:使用$_的Perl多階grep
