django - 重定向到正确的本地化 : Nginx, Apache、memcached 和 Django

标签 django localization memcached nginx mod-python

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

相关文章:

python - Django channel 。如何使用子协议(protocol)响应 WebSocket 打开请求?

Django - LANGUAGE_CODE - 'en-IN' 不起作用,但 'hi-IN' 有效

swift - 如何在 Swift 中本地化 tableView?

IOS 框架本地化不起作用

php - 在 php 中获取内存缓存项的过期时间?

python - 覆盖 Django ImageField 验证

python - 重新验证/确认用户凭据

ruby-on-rails - 使用缓存来优化 Rails 中的时间线

django - 如何在 Django Rest Framework 的 get 方法中序列化查询集?

caching - memcache、redis、ehcache作为分布式缓存框架的比较