Meteor on httpd (Apache/2.4.6 CentOS) proxy and WebSockets -
i can't workout how websockets work when deploy meteor app online. keep getting error:
websocket connection 'ws://website.com/sockjs/***/********/websocket' failed: unexpected response code: 400
i think due fact apache sits in front of meteor app. know apache 2.4
had bug make ws://
working, think should resolved modules/mod_proxy_wstunnel.so
, have enabled (of course have enabled modules/mod_proxy.so
)
here's config. i'm running meteor 1.2.1
systemd service (/etc/systemd/system/meteor.service
) so:
[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
this output of httpd -v
server version: apache/2.4.6 (centos) server built: aug 28 2015 22:11:18
and relevant part in vhost config (/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 </proxy> </virtualhost>
i've tried add rewritecond
suggested here no success...
any idea? i'm having issue getting oauth
work accounts-facebook
package , guess problem same reason? in, there wrong in proxy settings?
solved mystery. of course bad: forgot varnish.
i had varnish set on port 80 forwarding request apache, in turn proxying request node.js. resolved removing apache , configuring varnish serve straight node.js specific domain.
this did:
- implemented this default.vcl in
/etc/varnish/
- removed
import directors
, content insidesub vcl_init {}
(as have single server) - replaced
set req.backend_hint = vdir.backend();
insub vcl_recv {}
with:
if (req.http.host ~ "^(www\.)?website.com") { set req.backend_hint = nodejs; } else { set req.backend_hint = apache; }
- created 2 backends so:
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; }
Comments
Post a Comment