我有一台服务器用于运行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和铮铮的东西,但说实话,我不知所措。谁能提供一些方向?
答案 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
一切都很好。