在同一IP和Websocket错误上将子域转发到新端口

时间:2017-11-15 22:40:28

标签: node.js apache subdomain portforwarding

我有一台服务器用于运行node.js应用程序。其中一个是我们在办公室使用的消息应用程序(类似于松弛)。当我运行应用程序时,应用程序可以在http://0.0.0.0:8000/访问,以便从外部(从服务器系统外部)到达它。我在conf文件中使用VirtualHost设置端口转发。顺便说一句,我使用Apache2.4.18运行Web服务器。 有关更多详细信息,请在Ubuntu 16.04 LTS上使用pm2运行

我设置了这样的配置文件:
<VirtualHost *:80> ServerAdmin me@mydomain.com ServerName messenger.mydomain.com ProxyPreserveHost On # setup the proxy <Proxy *> Order allow,deny Allow from all </Proxy> ProxyPass / http://0.0.0.0:8000/ ProxyPassReverse / http://0.0.0.0:8000/ </VirtualHost>

连接成功,我可以写入NoSQL数据库文件,但由于此错误,似乎没有从NoSQL数据库中读取项目

WebSocket connection to 'ws://messenger.mydomain.com/' failed: Error during WebSocket handshake: Unexpected response code: 200

我在设置反向代理和处理WebSockets方面确实没什么经验,因此经过一些广泛的谷歌搜索后,我不确定我需要什么来使WebSocket工作。我尝试学习类似于棘手的PHP和铮铮的东西,但说实话,我不知所措。谁能提供一些方向?

1 个答案:

答案 0 :(得分:0)

我已经解决了。

我需要运行此命令a2enmod rewrite PS:确保你已经运行a2enmod proxy a2enmod proxy_wstunnel a2enmod proxy_http

然后添加到我的subdomain.mydomain.com.conf文件中:

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

因为我在服务器上本地使用端口8000。

这解决了问题并允许一切正确加载。

所以我的apache2 / sites-available / subdomain.mydoamin.com.conf看起来像这样:

<VirtualHost *:80>
    ServerAdmin me@mydomain.com
    ServerName subdomain.mydomain.com  

RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule .* ws://localhost:8000%{REQUEST_URI} [P]  
    # setup the proxy
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPass / http://0.0.0.0:8000/
    ProxyPassReverse / http://0.0.0.0:8000/
</VirtualHost>

然后我跑了service apache2 restart
一切都很好。