【问题标题】:Thin behind Nginx "no live upstreams while connecting to upstream"Nginx 背后的薄“连接到上游时没有实时上游”
【发布时间】:2010-08-20 03:39:39
【问题描述】:

我在 50-100 个请求中可能有一个收到此错误。我在 nginx 后面运行 10 个瘦实例,我认为我的负载不足以使所有 10 个实例的使用量最大化。我希望 nginx 等待,即使所有实例都很忙(也许不是??) .有没有其他人见过这个?我正在尝试找出调试它的好方法。

这是我的设置: Rackspace 云服务器 2GB 实例上的 CentOS 5.5 nginx 0.7.67 瘦1.2.7 导轨 3RC Ruby 1.9.2rc2

Nginx 和 10 个精简实例在同一台服务器上运行。

【问题讨论】:

  • 我没有关于调试它的有用建议,但我隐约记得在运行 Thin 时遇到了这个问题。我通过在 nginx 和 Thin 之间运行 HAProxy 解决了这个问题;它实现了请求队列,当它找不到后端来处理请求时,它可以显示一个友好的“重载”页面。
  • 查看我的错误日志后,这总是发生在:“上游过早关闭连接,同时从上游读取响应标头”之后。像这样的一系列错误有10个。我猜它必须在每个瘦实例上重试,并且(来自不同用户)的下一个请求总是导致没有实时上游。

标签: ruby-on-rails nginx thin


【解决方案1】:

caches_action 加上 action 中的 redirect_to 导致了这种情况。似乎它正在写入缓存(或可能从中读取)然后重定向,这导致连接过早关闭。我能够通过使用 caches_action 中的 if 条件来检测重定向是否会发生来解决这个问题。如果我检测到它会发生,我在 x.cacheable 中返回 false?

my_controller.rb

caches_action :show, :if => Proc.new { |x| x.cacheable? }

action_controller.rb

def cacheable?
  params[:id]>1000 ? true : false
end

基本上,如果 params[:id]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2018-09-20
    • 2016-05-08
    • 2012-10-24
    • 2011-08-01
    相关资源
    最近更新 更多