我的django网站有2种语言,当语言改变时,nginx用旧语言命中缓存,语言不会改变(当然,缓存页面不会改变)。为了防止我需要将“$ sent_http_content_language”变量添加到我的“proxy_cache_key”但不起作用,即使我尝试过:
add_header Test $sent_http_content_language;
http://wiki.nginx.org/HttpCoreModule#.24sent_http_HEADER
答案 0 :(得分:3)
我要采取刺... $sent_http_HEADER
对缓存键没有多大意义,因为那是响应的一部分。在实际联系上游服务器并执行请求之前,nginx无权访问响应。
请注意,nginx无法告诉上游服务器“嘿......基于响应标头,您刚刚发送,我将从缓存中提供剩余的请求”。
所以...如果您无法从请求判断响应已经在缓存中,则根本无法使用缓存。
解决此问题的一种方法是使用cookie;您可以将用户的语言首选项添加到cookie中,客户端将在后续请求中返回该cookie。由于该值存在于请求中,因此您可以在缓存键中使用它(如$cookie_lang
,如果响应有Set-Cookie: lang=tr
)。
这有一个相关的问题;即使你在服务器上有这种缓存,使用响应的语言标题,工作;你仍然不会在客户端看到更新;因为它将在浏览器缓存中。您无法关闭该缓存,除了少数缓存控制头之外,您无法控制它。根据您发布的内容,看起来它们已经以合理的方式设置(5分钟过期,Vary标题列表cookie
)。这意味着您应该遵守该承诺,仅更改与这些请求标头一致的响应内容。
幸运的是,添加一个cookie来表达语言 会尊重你正在使用的缓存控制标题。