当我在线部署流星应用程序时,我无法锻炼如何让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
作为系统服务(/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
这是我的/etc/httpd/conf/httpd.conf
的vhost配置(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>
我已经尝试按照建议here添加RewriteCond
,但没有成功......
有什么想法吗?我也有问题让oauth
使用accounts-facebook
包,我想问题是出于同样的原因?在,我的代理设置有问题吗?
答案 0 :(得分:0)
解开了谜团。当然这是我的坏事:我忘记了所有关于清漆。
我在端口80上设置了Varnish,将请求转发给Apache,后者又将请求代理到node.js.我解决了删除apache并因此配置Varnish直接服务于该特定域的node.js.
这就是我所做的:
/etc/varnish/
import directors
以及sub vcl_init {}
内的所有内容(因为我只有一台服务器)set req.backend_hint = vdir.backend();
中的sub vcl_recv {}
替换为: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;
}