2011-04-20 30 views
2

我的站點使用URL中的字符串進行本地化(例如/DE/certificate獲取德語版本,/US/certificate獲取en-US等)對於站點上的某些URL,本地化部分重定向到最佳猜測(通常爲/US/<url>),但對於其他人我只是得到一個空白頁。重定向到正確的本地化:Nginx,Apache,memcached和Django

這是一個Django網站。 Django在Apache上運行mod_python,監聽端口8000. Nginx位於端口80.當請求進入時,Nginx會檢查該頁面的memcached,如果它位於緩存中,則直接從緩存中提供。如果memcached未命中,Nginx會將請求代理回Apache。 Django將大多數GET請求的輸出存儲到memcached中。這個網站的流量非常高,這種方法可以幫助我們從相對低功耗的服務器中獲得最大收益。

上面描述的問題是而不是如果我跳過Nginx和緩存,並直接向端口8000上的Apache發送請求。這導致我懷疑問題是在Nginx/memcached層。

看到一個成功的請求中的Apache日誌顯示爲非本地化請求返回302,併爲更正後的URL發出新請求。看到Nginx的日誌失敗請求顯示200響應,並顯然是空的響應。我的直覺是空的頁面被存儲在memcached中。是否有任何方法來調查memcached中的密鑰以確認此預感,還是應該尋找其他信息來調試問題?

這裏的nginx的配置的相關章節:

location/{ 
      if ($request_method = POST) { 
       proxy_pass http://production; 
       break; 
      } 
      default_type "text/html; charset=utf-8"; 
      set $memcached_key "/key-$uri"; 
      memcached_pass  localhost:11211; 
      error_page 404 502 = /django; 
    } 

    location = /django { 
      proxy_pass http://production; 
      break; 
    } 

它是否有助於我,包括我的Django的緩存中間件?我幾乎完全按照this article設置它。

回答

3

使用 「@django」(上兩行),而不是 「/ Django的」

+0

賓果,正是我需要的。我還需要從位置行刪除「=」(所以它的位置@django {')。在文檔中詳細說明如果我知道在哪裏看:http://wiki.nginx.org/HttpCoreModule#error_page – pjmorse 2011-05-03 16:49:53