2011-04-20 74 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