faye private_pub rails ubuntu连接被拒绝

时间:2016-04-21 07:06:08

标签: ruby-on-rails nginx amazon-ec2 faye private-pub

所以我尝试使用Bryan Bate的private_pub gem(faye gem的包装器)设置一个rails应用程序来创建聊天频道。它在开发模式下在我的本地机器上运行良好。

我也在我的rails应用程序启动的同时启动了端口8080上的private_pub服务器,其中包含一行初始化文件:

Thread.new do
  system("rackup private_pub.ru -s thin -E production -p 8080")
end

然而,在使用nginx webserver和puma app sever部署到aws ec2 ubuntu实例之后,chrome控制台每2秒就会显示一次,并且实时聊天功能不起作用。

GET http://localhost:8080/faye.js net::ERR_CONNECTION_REFUSED

如果我在我的aws安全组中打开端口8080,当我进入实例时,我可以使用来自localhost:8080 / faye.js的curl在faye.js中看到大量的javascript代码。如果我转到http://my.apps.public.ip:8080/faye.js,我也可以从浏览器访问它。如果我从安全组中删除8080,则无法访问它,因此我认为这不是防火墙问题。

此外,如果我将地址从localhost更改为0.0.0.0或我的ec2实例的公共IP,Chrome控制台错误消失了,但实时聊天仍然无法正常工作。

我怀疑我可能需要对nginx进行更多配置,因为到目前为止我所做的所有配置nginx服务器都在/ etc / nginx / sites-available / default中,我有:

upstream app {
  server unix:/home/deploy/myappname/shared/tmp/sockets/puma.sock fail_timeout=0;
}

server {
  listen 80;
  server_name localhost;

  root /home/deploy/myappname/public;

  try_files $uri/index.html $uri @app;

  location / {
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Connection '';
    proxy_pass http://app;
  }

  location ~ ^/(assets|fonts|system)/|favicon.ico|robots.txt {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}

但也许这与nginx无关,我很遗憾。有没有人经历过这个或者可以提出替代解决方案?如果需要,我可以在这里发布任何其他配置文件。

1 个答案:

答案 0 :(得分:1)

<强>解决

首先我接受了Ian的建议并将server_name设置为我的公共IP

然后

基于http://www.johng.co.uk/2014/02/18/running-faye-on-port-80/

的指南

我添加了位置块

 location ^~ /faye {
    proxy_pass         http://127.0.0.1:9292/faye;
    proxy_redirect     off;
    proxy_set_header   Upgrade    $http_upgrade;
    proxy_set_header   Connection "upgrade";
    proxy_http_version 1.1;
    proxy_buffering    off;
    proxy_cache_bypass $http_pragma $http_authorization;
    proxy_no_cache     $http_pragma $http_authorization;
  }

最后,对于我的private_pub.yml,我设置了生产的faye入口点:

production:
  server: "http://my.public.ip:80/faye/faye"
  secret_token: "mysecrettoken"
  signature_expiration: 3600 # one hour

现在我的应用程序中的聊天响应速度比我在heroku上使用远程独立聊天服务器的速度要快得多,因为聊天服务器和我的主应用程序都在同一个实例中运行。