2

我的 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

我的响应标头

4

1 回答 1

3

我要试一试...$sent_http_HEADER对于缓存键没有多大意义,因为这是响应的一部分。nginx 在实际联系上游服务器并执行请求之前无法访问响应。

请注意,nginx 无法告诉上游服务器“嘿...根据响应标头,您刚刚发送,我将从缓存中处理其余的请求”。

所以......如果您无法从请求中得知响应已经在缓存中,那么您根本无法使用缓存。

解决此问题的一种方法是使用 cookie;您可以将用户的语言偏好添加到 cookie 中,该 cookie 将由客户端在后续请求中返回。由于该值存在于请求中,因此您可以在缓存键中使用它(例如$cookie_lang,如果响应具有Set-Cookie: lang=tr)。


这有一个相关的问题;即使您在服务器上有这种缓存,使用响应的 Language 标头,也可以正常工作;您仍然不会在客户端中看到更新;因为它会在浏览器缓存中。您无法关闭该缓存,也无法控制它,除非使用少数缓存控制标头。从您发布的内容来看,它们似乎已经以合理的方式设置(5 分钟过期,Vary header lists cookie)。这意味着您必须遵守该承诺,并且根据这些请求标头更改响应内容。

幸运的是,添加一个 cookie 来表达语言确实尊重您正在使用的缓存控制标头。

于 2013-01-01T01:49:42.620 回答