当我在线部署我的流星应用程序时,我无法弄清楚如何让 WebSockets 工作。我不断收到此错误:
WebSocket connection to 'ws://website.com/sockjs/***/********/websocket' failed: Unexpected response code: 400
我认为这是因为 apache 坐在我的流星应用程序前面。我知道Apache 2.4
有一个错误来使ws://
工作,但我认为这应该通过我已启用的modules/mod_proxy_wstunnel.so
来解决(当然我也启用了modules/mod_proxy.so
)
这是我的配置。我Meteor 1.2.1
作为systemd服务(/etc/systemd/system/meteor.service
)运行,如下所示:
[Unit]
Description=meteor nodejs daemon
After=network.target remote-fs.target
[Service]
User=root
ExecStart=/usr/bin/node /home/root/www/main.js
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=meteor
Environment=ROOT_URL=http://website.com
Environment=PORT=3000
Environment=NODE_ENV=production
Environment=MONGO_URL=mongodb://127.0.0.1:27017/meteor
[Install]
WantedBy=multi-user.target
这是httpd -v
的输出
Server version: Apache/2.4.6 (CentOS)
Server built: Aug 28 2015 22:11:18
这是我的 vhost 配置 ( /etc/httpd/conf/httpd.conf
) 中的相关部分,用于website.com
:
<VirtualHost my.ser.ver.ip:8080>
ServerName website.com
ServerAlias www.website.com
ProxyRequests Off
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
<Proxy *>
Allow from all
</Proxy>
</VirtualHost>
我已经尝试按照此处的建议添加RewriteCond
但没有成功......
知道吗?我也在让oauth
使用 accounts-facebook
包时遇到问题,我想问题也是出于同样的原因?例如,我的代理设置有问题?
开了这个谜团。当然,这是我的错:我忘记了所有关于清漆的事情。
我在端口 80 上设置了 Varnish,将请求转发到 Apache,而 Apache 又将请求代理到 node.js。我通过删除 apache 来解决,从而将 Varnish 配置为直接服务于该特定域的节点.js。
这是我所做的:
- 在
/etc/varnish/
中实现了这个默认.vcl - 删除了
import directors
和sub vcl_init {}
中的所有内容(因为我只有一个服务器) - 将
sub vcl_recv {}
中的set req.backend_hint = vdir.backend();
替换为:
if (req.http.Host ~ "^(www.)?website.com") {
set req.backend_hint = nodejs;
} else {
set req.backend_hint = apache;
}
- 创建了两个后端,如下所示:
backend apache {
.host = "127.0.0.1";
.port = "8080";
.max_connections = 300;
.probe = {
.request =
"HEAD / HTTP/1.1"
"Host: localhost"
"Connection: close";
.interval = 5s;
.timeout = 1s;
.window = 5;
.threshold = 3;
}
.first_byte_timeout = 300s;
.connect_timeout = 5s;
.between_bytes_timeout = 2s;
}
backend nodejs {
.host = "127.0.0.1";
.port = "3000";
.connect_timeout = 1s;
.first_byte_timeout = 2s;
.between_bytes_timeout = 60s;
.max_connections = 800;
}