目錄
- 碎碎念
- 解決方法
- 創建 HTTPS WebSocket 服務器
- 創建系統服務
- 啟動服務
碎碎念
在訪問網站時,使用 HTTPS 非常重要。HTTPS 協議不僅可以確保數據傳輸的安全性,還可以防止中間人攻擊和數據篡改等安全問題。任何沒有 SSL 證書的內容都可能會被拒絕訪問。因此,在配置 WebSocket 服務器時,我們也需要確保其支持 HTTPS。
在這種情況下,直接運行 HOST=0.0.0.0 PORT=9000 npx y-websocket 將無法正常工作,因為它不支持 HTTPS。接下來,我們將介紹如何通過創建一個支持 HTTPS 的 WebSocket 服務器來解決這個問題。
解決方法
創建 HTTPS WebSocket 服務器
首先,我們需要創建一個文件 secure-server.js,該文件將用于配置 HTTPS 和 WebSocket 服務器:
const fs = require('fs');
const https = require('https');
const WebSocket = require('ws');
const { setupWSConnection } = require('y-websocket/bin/utils');const port = process.env.PORT || 9000;
const host = process.env.HOST || '0.0.0.0';
const cert = process.env.SSL_CERT || '/path/to/cert.pem';
const key = process.env.SSL_KEY || '/path/to/key.pem';
// 也可以是
// const cert = process.env.SSL_CERT || '/path/to/cert.pem';
// const key = process.env.SSL_KEY || '/path/to/cert.key';const server = https.createServer({cert: fs.readFileSync(cert),key: fs.readFileSync(key)
});const wss = new WebSocket.Server({ server });wss.on('connection', (conn, req) => setupWSConnection(conn, req, { docName: req.url.slice(1).split('?')[0] }));server.listen(port, host, () => {console.log(`https://${host}:${port}`);
});
在上述代碼中,我們使用 https 模塊創建了一個 HTTPS 服務器,并使用 ws 模塊創建了一個 WebSocket 服務器。通過讀取 SSL 證書和密鑰文件,我們確保了服務器的安全性。
創建系統服務
為了確保我們的 WebSocket 服務器能夠在系統啟動時自動運行,我們需要創建一個 systemd 服務文件 y-websocket.service:
[Unit]
Description=Y-WebSocket Server Service
After=network.target[Service]
User=root
Group=root
WorkingDirectory=/path/to/WorkingDirectory
Environment="HOST=0.0.0.0" "PORT=9000" "SSL_CERT=/path/to/cert.pem" "SSL_KEY=/path/to/key.pem"
; 或者是 Environment="HOST=0.0.0.0" "PORT=9000" "SSL_CERT=/path/to/cert.pem" "SSL_KEY=/path/to/cert.key"
ExecStart=/usr/bin/node /path/to/secure-server.js
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=y-websocket-server[Install]
WantedBy=multi-user.target
這個服務文件定義了 WebSocket 服務器的啟動和運行方式。通過設置環境變量,我們可以靈活地配置服務器的主機、端口和 SSL 證書路徑。
啟動服務
最后,我們需要運行以下指令來啟動并啟用服務:
sudo systemctl daemon-reload
sudo systemctl restart y-websocket.service
sudo systemctl enable y-websocket.service
通過以上步驟,我們創建了一個支持 HTTPS 的 WebSocket 服務器,并確保其在系統啟動時自動運行。這不僅提高了服務器的安全性,還簡化了服務器的管理和維護。