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