【问题标题】:How to run socket.io on port 443 where apache is running?如何在运行 apache 的端口 443 上运行 socket.io?
【发布时间】:2019-01-11 02:09:35
【问题描述】:

我需要在端口 443 上运行 socket.io(其中 apache 使用 Let's Encrypt 运行 https 站点)

这个想法是使用 apache 代理将流量重定向到 socket.io 端口。 我找到了解决方案:

<VirtualHost *:443>
     ServerName mysite.com
     ServerAlias www.mysite.com

     SSLEngine on
     SSLProxyEngine On
     ProxyRequests Off

     SSLCertificateFile /etc/apache2/ssl/mysite.com.crt
     SSLCertificateKeyFile /etc/apache2/ssl/mysite.com.key
     SSLCertificateChainFile /etc/apache2/ssl/ca.cer

     DocumentRoot /var/www/errorPages

     ErrorDocument 503 /503.html
     ProxyPass /503.html !

     ProxyPass / http://localhost:3999/
     ProxyPassReverse / http://localhost:3999/

RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://localhost:3999%{REQUEST_URI} [P]

</VirtualHost>

我在端口 3999 上运行 socket.io HTTPS 站点工作正常,但是我收到了 http 404 错误。 我想问题出在 rewriteCond 上。

websocket.js:112 WebSocket 连接到 'wss://mysite.com/socket.io/?id=11518237&username=john 失败:错误 在 WebSocket 握手期间:意外的响应代码:404

【问题讨论】:

  • 出于好奇,为什么要使用这样的架构?据我了解,两者都是服务器本身对吗?
  • 我有同样的问题 - 你找到解决方案了吗? (stackoverflow.com/questions/60356062/…)

标签: apache websocket socket.io mod-proxy-wstunnel


【解决方案1】:

为不同的用途使用不同的 IP 地址。您有&lt;VirtualHost *:443&gt;,它尝试将所有 IP 地址用于单个虚拟主机。我想你想要一个 &lt;VirtualHost pub.lic.ip.addr:443&gt; 用于 Let's Encrypt 和一个 &lt;VirtualHost localhost:443&gt; 用于 socket.io 代理。

【讨论】:

    【解决方案2】:

    试试 mod_proxy_wstunnel

    It provides support for the tunnelling of web socket connections to a backend websockets server. The connection is automatically upgraded to a websocket connection

    https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html

    【讨论】:

      猜你喜欢
      • 2021-01-29
      • 1970-01-01
      • 2020-01-26
      • 2014-08-16
      • 1970-01-01
      • 2015-01-07
      • 2014-01-31
      • 2012-07-22
      • 2019-11-16
      相关资源
      最近更新 更多