所以我是 Socket.IO 的绝对初学者,但我有一个预构建的应用程序,需要通过两种方式保护:它需要通过 HTTPS 传输,并且需要限制为仅将数据服务器到特定域。
这是迄今为止发射器的代码:https://github.com/Bitzz/Pokemon-Go-Coords/blob/master/discord-bot/index.js 我该如何保护它? 我假设类似
io.set('origins', 'https://example.com:*');
第 156 行会将其限制为一个域... 我可以只将特定域列入黑名单吗? 除此之外,我如何让它通过 wss 通过 https 发出?
我想我可以弄清楚如何配置网络侧阅读器来查找 https websocket,但是如何发送它我不知道如何弄清楚。 请用简单的语言,我不是一个聪明的人。 :(
要将Socket.IO限制为多个域,我相信你只需要将每个域分隔一个空格即可。
io.set('origins', 'https://example.com:* https://anotherdomain.com:*');
关于 SSL 连接,有多种存档方法:
第三个选项是最简单的存档方式。您只需将您的域名指向 CloudFlare 并配置一条记录到您的
ws
服务器,CloudFlare 将免费为 websocket 提供 ssl,并自动对您的原始 websocket 服务器进行 SSL 终止。
我找到了解决方案。
在安全配置 (*:443) 的 apache2 站点配置文件中,添加以下内容:
#This enables polling over https. Painfully inefficient but a good fallback
SSLProxyEngine on
ProxyPass /socket.io http://127.0.0.1:49002/socket.io/
ProxyPassReverse /socket.io http://127.0.0.1:49002/socket.io/
#This upgrades and rewrites the ws to wss
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://localhost:49002%{REQUEST_URI} [P]