我有一个通过Apache代理访问的Meteor应用程序。该应用似乎有效,但我在Chrome控制台中看到了错误。我猜它有效,因为有一些不太理想的后备。它得到错误:
ddp-client failed: Error during WebSocket handshake: Unexpected response code: 400
我已经阅读了很多这个问题的解决方案,这个解决方案看起来相当普遍(并尝试了很多),但它们常常与复杂性联系在一起,这使得解决方案在我非常简单的设置中无法使用。简单地说,我应该如何配置我的Apache代理来服务Meteor并避免WebSocket ddp-client错误。
<VirtualHost *:80>
ServerName my-domain.com
????
</VirtualHost>
答案 0 :(得分:0)
你的应用程序正在运行,因为Meteor在幕后使用SockJS进行XHR长轮询后退。
要启用WebSocket代理,如果您使用的是Apache 2.4.5及更高版本,则可以尝试使用mod_proxy
和mod_proxy_wstunnel
(假设您的Meteor应用侦听端口3000):
<VirtualHost *:80>
ServerName my-domain.com
RewriteEngine On
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:3000/$1 [P,L]
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
如果不使用上述模块,您可以尝试以下方法:
<VirtualHost *:80>
ServerName my-domain.com
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule /(.*) ws://localhost:3000/$1 [P,L]
</VirtualHost>