1

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

我还在端口 8080 上启动 private_pub 服务器,同时我的 rails 应用程序通过包含以下行的初始化文件启动:

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

但是,在使用 nginx 网络服务器和 puma 应用服务器部署到 aws ec2 ubuntu 实例后,chrome 控制台每 2 秒显示一次,并且实时聊天功能不起作用。

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

如果我在我的 aws 安全组中打开端口 8080,当我 ssh 进入实例时,我可以使用来自 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 无关,我很迷茫。有没有人经历过这种情况或可以提出替代解决方案?如果需要,我可以在此处发布任何其他配置文件。

4

1 回答 1

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 上使用远程独立聊天服务器时快得多,因为聊天服务器和我的主应用程序都在同一个实例中运行。

于 2016-04-23T03:23:59.960 回答