当前位置: 首页 > 知识库问答 >
问题:

为socket.io和SSL/WSS设计Apache

郭博涉
2023-03-14

正如标题所示,我试图让Apache和socket.io(node.js)更好地发挥作用,尤其是在SSL上。目前,https://www.example.com的客户端应用程序使用socket.io over SSL连接到服务器[SSL protocol]://socket.example.com/socket.io/?query_stuff*。到wss://的连接总是失败,所以socket.io降级为https://,它可以正常工作。但是我希望利用websocket协议,而不是依赖http上的轮询。

服务器版本:Apache/2.4.7(Ubuntu)

我在*:443上创建了一个名为socket.example.com的虚拟主机。它的预期目的是反向代理[wss,https]://socket.example.com/指向运行在http://localhost:9000/的socket.io服务器。在这里,去掉了无关的部分:

<VirtualHost *:443>
    ServerName socket.example.com
    DocumentRoot /var/www/example/socket.io/

    RewriteEngine On
    RewriteCond %{REQUEST_URI}  ^/socket.io             [NC]
    RewriteCond %{QUERY_STRING} transport=websocket     [NC]
    RewriteRule /(.*)           wss://localhost:9000/$1 [P,L]

    ## I have also tried the following RewriteRules: ##
    # RewriteRule /(.*)         http://localhost:9000/$1 [P,L]
    # RewriteRule /(.*)         http://localhost:9000/socket.io/$1 [P,L]

    SSLEngine on
    SSLCertificateFile    /etc/letsencrypt/live/www.example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/keys/0001_key-certbot.pem
    SSLCACertificateFile  /etc/letsencrypt/ca-bundle.pem

    SSLProxyEngine On
    ProxyRequests Off
    ProxyPreserveHost On
    ProxyVia Full

    ProxyPass / http://localhost:9000/
    ProxyPassReverse / http://localhost:9000/
</VirtualHost>

在为websocket服务器切换到Node.js之前,我使用上面的Apache VirtualHost成功地将wss://socket.example.com/ws_daemon.php路由到ws://localhost:9000/ws_daemon.php。在这个场景中I1。删除了重写规则和2。将ProxyPass设置更改为:

ProxyPass / ws://localhost:9000/
ProxyPassReverse / ws://localhost:9000/

但同样的逻辑似乎并没有延续到socket.io。

在这一点上,我已经没有想法了。任何帮助都将不胜感激!

共有1个答案

夏祺然
2023-03-14

如果使用的是 块,则应向其添加以下行:

RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule /socket.io/(.*) ws://localhost:3000/socket.io/$1 [P]
 类似资料:
  • 问题内容: 使用Nginx时,我的套接字无法连接。我的配置文件是: 我的NodeJS是: 我的客户是 不用说,两者都不显示任何东西。我担心Nginx阻止了该请求,而节点却实际上从未收到它? 问题答案: 好像缺少了

  • 我试图在我的应用程序上使用SSL,使用express和nginx运行socket.io,但我无法使其工作。我已经做了我的研究,但我发现的都不起作用。 我一直有错误:ERR_CONNECTION_CLOSED在客户端没有http状态代码。 我做错了什么?

  • 我试图使用Cloudflare为CDN/保护运行带有Node.js+Socket.io的Apache,但是出了问题。 我用来在node.js上创建服务器的代码是 我实际上是在使用ProxyPass来处理子域“API”。传递给node.js/express: 这是工作的,但webosocket不是。没有Apache(直接在Express上运行),所有工作都很好,包括WebSocket。但是,我也需要

  • 问题内容: 我正在尝试使用我的SSL证书运行socket.io,但是它将无法连接。 我基于聊天示例创建代码: 如果我删除SSL代码,它运行正常,但是与此同时,我收到了一个请求,请求http://domain.com/socket.io/1/?t=1309967919512 请注意,它没有尝试使用https,这会导致它失败。 我正在测试chrome,因为它是该应用程序的目标浏览器。 抱歉,这是一个简

  • WSS

    温馨提示:该项目只部分代码开源,未开源部分请咨询作者后使用。 WSS(White Shark System)基于PMI®全球项目管理标准,专注于项目管理规范性、易用性、以及视觉效果。 主要功能:项目管理、任务管理、工时管理、工作日志管理、文档管理等。 WSS简单易用,即使不参考帮助文档,不参加使用培训,也能凭借直觉快速上手。   WSS支持PC/MAC桌面以及移动设备同时使用。 演示地址:http

  • 我的网站流量通过Cloudflare激活了完整的通用SSL。 在apache虚拟主机中,我有以下配置: 我的Node.js服务器通过HTTPS: