這個問題快把我逼瘋了。
我有這臺機器使用 express 和 socket.io over ssl(使用 nginx 代理通行證)
const { v4: uuidV4 } = require('uuid')
const express = require('express')
const app = express()
const fs = require('fs')
const https = require('https')
const options = {
key: fs.readFileSync('/etc/ssl/xxx/ssl.key'),
cert: fs.readFileSync('/etc/ssl/xxx/ssl.combined'),
}
const httpsServer = https.createServer(options, app)
httpsServer.listen(3000, function () {
console.log("Example app listening at %s", httpsServer.address().port);
});
const io = require("socket.io")(httpsServer);
一切似乎都正常,如果我訪問 url,訊息作業正常。但實際上它只能通過輪詢作業,如果我強制傳輸: ['websocket'] 我得到 101“切換協議”,但我沒有得到任何升級。
這是我對該域的 nginx 配置。
location / {
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass https://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
listen 161.97.166.96:443 ssl;
ssl_certificate /etc/ssl/xxx/ssl.combined;
ssl_certificate_key /etc/ssl/xxx/ssl.key;
有什么幫助嗎?
uj5u.com熱心網友回復:
最后我不得不在另一個埠上創建另一個服務器并且沒有問題地作業。
const server2 = https.createServer(options)
server2.listen(3002)
const io = require("socket.io", { secure: true, transports: ["websocket"] })(server2);
我還必須更新我的 nginx 組態檔
location /socket.io/ {
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass https://127.0.0.1:3002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/507690.html
標籤:javascript 节点.js nginx 网络套接字 套接字.io
上一篇:如何在docker中使用上游隨機指令運行nginx負載均衡器
下一篇:錯誤:RuntimeError:會話不可用,因為未設定密鑰。將應用程式上的secret_key設定為唯一且保密的
