httpd(Apache/2.4.6 CentOS)代理和WebSockets上的Meteor



当我在线部署我的流星应用程序时,我无法弄清楚如何让 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。

这是我所做的:

  1. /etc/varnish/中实现了这个默认.vcl
  2. 删除了import directorssub vcl_init {}中的所有内容(因为我只有一个服务器)
  3. 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;
}
  1. 创建了两个后端,如下所示:

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;
}

相关内容

  • 没有找到相关文章

最新更新