2

私のdjangoサイトには2つの言語があり、言語が変更されると、nginxは古い言語でキャッシュにヒットし、言語は変更されません(もちろん、キャッシュされたページは変更されません)。これを防ぐには、「$ send_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がアップストリームサーバーに「ねえ...送信したばかりの応答ヘッダーに基づいて、キャッシュから残りのリクエストを処理します」と伝える方法がないことに注意してください。

したがって...応答がすでにキャッシュにあることをリクエストから判断できない場合は、キャッシュをまったく使用できません。

これを解決する1つの方法は、Cookieを使用することです。ユーザーの言語設定をCookieに追加できます。これは、後続のリクエストでクライアントから返されます。その値はリクエストに存在するため、キャッシュキーで使用できます($cookie_langレスポンスにが含まれている場合などSet-Cookie: lang=tr)。


これに関連する問題があります。サーバーでこの種のキャッシュがあったとしても、応答の言語ヘッダーを使用して機能します。それでもクライアントに更新は表示されません。ブラウザのキャッシュにあるからです。そのキャッシュをオフにすることはできません。また、少数のcache-controlヘッダーを除いて、キャッシュを制御することもできません。あなたが投稿したコンテンツから、それらはすでに賢明な方法で設定されているように見えます(5分が経過し、ヘッダーリストを変更しますcookie)。つまり、その約束を尊重し、それらのリクエストヘッダーに同意する だけで応答コンテンツを変更するのはあなた次第です。

幸い、言語を表現するためにCookieを追加すると、使用しているキャッシュ制御ヘッダーが尊重されます。

于 2013-01-01T01:49:42.620 に答える