我的网站使用 URL 中的字符串进行本地化(例如 /DE/certificate
获取德语版本, /US/certificate
获取 en-US
等)对于网站上的某些 URL,省略本地化部分会重定向到最佳版本-guess(通常 /US/<url>
)但对于其他人我只是得到一个空白页。
这是一个 Django 站点。 Django 正在运行 mod_python
在 Apache 上,监听端口 8000。Nginx 位于端口 80。当请求传入时,Nginx 检查 memcached 中的页面,如果该页面在缓存中,则直接从缓存中提供服务。如果 memcached 未命中,Nginx 会将请求代理回 Apache。 Django 存储大多数 GET
的输出请求进入 memcached。该网站的流量非常高,这种方法可以帮助我们从性能相对较低的服务器中获得最大 yield 。
如果我跳过 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”(两行)而不是“/django”
关于django - 重定向到正确的本地化 : Nginx, Apache、memcached 和 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5735910/