2010-08-20 43 views
2

我得到這個錯誤可能是50-100個請求中的一個。我在nginx後面運行了10個精簡實例,並且我認爲我的負載不足以使所有10個實例的用量達到最大值。我希望nginx能夠等待,即使所有實例都很忙(也許不是??) 。有沒有其他人看過這個?我試圖找出調試它的好方法。Nginx「連接到上游時沒有活上游」薄

這裏是我的設置: 的CentOS 5.5 Rackspace的雲服務器2GB例如 的nginx 0.7.67 薄1.2.7 Rails的3RC 紅寶石1.9.2rc2

的Nginx和10個薄實例在同一運行服務器。

+0

我沒有有用的建議來調試它,但我依稀記得在運行Thin時碰到這個問題。我通過在nginx和Thin之間運行HAProxy來解決它;它實現了請求隊列,當它找不到後端來提供請求時,它可以顯示友好的「重載」頁面。 – 2010-08-20 04:40:40

+0

查看我的錯誤日誌後,總是發生在: 「上游過早關閉連接,同時讀取來自上游的響應頭」。 這裏有一系列的10個錯誤。我想它必須重試每個瘦實例,並且(通過不同的用戶)發出的下一個請求總是導致沒有活動的上游。 – johnmcaliley 2010-08-20 13:01:45

回答

4

caches_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 

基本上,我需要redirect_to的另一個控制器如果PARAMS [:ID] < 1000,所以可高速緩存? def檢查這一點,並告訴caches_action不要在這種特殊情況下緩存。

相關問題