播放框架:使用 Apache 保护 WebSocket
Posted
技术标签:
【中文标题】播放框架:使用 Apache 保护 WebSocket【英文标题】:Play framework: Secure WebSocket with Apache 【发布时间】:2015-11-19 10:58:15 【问题描述】:Play 2 框架不支持 Secure WebSocket。所以我使用 nginx 作为代理来作为 WSS 连接的 SSL 端点(如帖子 How to use TLS in Play!Framework WebSockets ("wss://") 中所建议的那样)。 一切都适用于 nginx。您知道 Apache HTTP Server 是否也可以做到这一点?我应该如何更改 httpd.conf 以将 Apache 作为 WSS 的 SSL 端点?
【问题讨论】:
【参考方案1】:是什么让您认为 Play 不支持安全 websocket?确实如此,安全 websocket 只是通过 https 而不是 HTTP 的常规 websocket 协议。只需启用 https,即可获得安全的 websocket 支持。
您可以使用以下方法在 Apache 中代理 websocket:
https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html
但是你这样做会很疯狂,Apache 每个连接使用一个线程,而 websockets 使用持久连接,当你期望它们中的很多时每个连接使用整个线程是浪费资源,非阻塞像 nginx 这样的代理更有意义。
【讨论】:
谢谢。我不知道 nginx 是非阻塞的。现在我明白了为什么在这种情况下不使用 Apache。但是,我尝试通过在 application.conf 中设置“https.port=9433”来在 Play 中启用 https,但它不起作用。我没有设置其他参数(play.server.https.keyStore.path、类型、密码和算法),因为我读过它们有默认值。 您的浏览器开发者控制台中的错误是什么?请注意,在没有任何额外配置的情况下,Play 会生成一个自签名证书,默认情况下您的浏览器会拒绝该证书,您需要将浏览器配置为信任该证书。 WebSocket 客户端是用 C 语言编写的,带有 libwebsocket。但我认为它与浏览器相同。我应该将其配置为信任证书。以上是关于播放框架:使用 Apache 保护 WebSocket的主要内容,如果未能解决你的问题,请参考以下文章