【发布时间】:2016-08-14 05:05:38
【问题描述】:
所以我尝试使用 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 无关,我很迷茫。有没有人经历过这种情况或可以提出替代解决方案?如果需要,我可以在此处发布任何其他配置文件。
【问题讨论】:
-
我没有完整的答案,但我可以看出部分问题在于您在 nginx 中使用了
server_name localhost;。 Chrome 指出,这是告诉客户端(在这种情况下是您)连接到使用名称“localhost”,因此您会得到GET http://localhost:8080/faye.js net::ERR_CONNECTION_REFUSED,因为您的浏览器正在尝试连接到 localhost:8080(您自己的计算机),由于您没有运行任何服务器,因此拒绝连接。有关 server_name 的帮助,请参见此处:nginx.org/en/docs/http/server_names.html -
谢谢伊恩,我认为你是对的。在您指出这一点之后,我意识到有时我在 chrome 中看到错误而其他时候没有看到的原因是因为有时我的本地计算机上也运行 Faye 服务器。我通过启动我的主应用程序而不在本地启动 Faye 服务器对其进行了测试,我看到了同样的错误。所以现在我只需要为 Faye 服务器找到合适的 Nginx 配置。非常感谢!
-
看起来您可以将其设置为您的 AWS 服务器的 IP(如果它是静态的),或者,如果您觉得很疯狂,
_(下划线)就是一个包罗万象的东西。这意味着任何连接(到端口 80)都将被接受。这主要用于一台服务器可以托管多个网站,并且它们被正确路由。我也刚刚注意到在启动时您告诉它使用端口 8080,而您的配置只有 80 集,所以也有...
标签: ruby-on-rails nginx amazon-ec2 faye private-pub