我的站点使用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