2016-11-25 11 views
0

私はDjangoプロジェクトのリバースプロキシとしてnginxを実装しています。認証済みユーザーがキャッシュをバイパスすることができるように、彼らは、サイトのコンテンツを更新するときしかし、私は、彼らが勝った、そうでない場合として、それが欲しい、ユーザが認証されている場合、nginxキャッシュをバイパスするDjango

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:5m max_size=1g inactive=60m; 
proxy_temp_path /var/cache/nginx/tmp; 

server { 
    ... 

    location/{ 
    proxy_pass http://127.0.0.1:8000; 
    proxy_set_header Host $host; 
    proxy_set_header X-Forwarded-Host $server_name; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"'; 

    # cache 
    proxy_cache my_cache; 
    proxy_cache_min_uses 1; 
    proxy_cache_valid 200 302 10m; 
    proxy_cache_valid 404 1m; 
    proxy_ignore_headers X-Accel-Expires Expires Cache-Control; 
    proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504; 
    proxy_cache_lock on; 

    proxy_hide_header "Set-Cookie"; 

    add_header X-Proxy-Cache $upstream_cache_status; 
    } 
} 

すべてが素晴らしい作品:私は今、以下のnginxのキャッシュの設定を実装しようとしています変更内容は表示されず、期限切れになるまでキャッシュされたコンテンツのみが表示されます。

このアプローチにはどのような方法が最適でしょうか?

ご協力いただければ幸いです。ユーザーが他のautheticatedそのクッキーを削除した場合

おかげ

+0

キャッシング動的コンテンツはほとんど常に悪い考え – e4c5

+0

サイトです大幅に動的ではありません。管理者が更新を行った場合、修正を行ったユーザーは、キャッシュが期限切れになるまで(またはURLバーにnocacheを入力するまで)更新を表示できません。 – tdsymonds

+0

1日あたりのページビュー数はどれくらいですか – e4c5

答えて

0

は応答して(例えばcachedisable)クッキーを設定するためにミドルウェアを追加します。あなたはnginxのconfの中$cookie_ cachedisableを置くことができるように

location/{ 
    proxy_cache_bypass $cookie_cachedisable $arg_nocache; 
    ... 
} 

あなたはバイパスキャッシュはより多くの情報については

http://www.example.com/?nocache=true #or if cookie `cachedisable` is present 

のような要求を行いたいときhttps://www.nginx.com/blog/nginx-caching-guide/?utm_source=nginx-caching-guide&utm_medium=blog#caching-guide-faq-hole-punch

+0

助けていただきありがとうございます。クエリ文字列を使用してキャッシュをバイパスすることはできますが、ユーザーが何かを変更するたびにクエリ文字列を追加することを忘れないように本当に理想的です。私はもっ​​と自動化された解決策を望んでいた – tdsymonds

+0

これはnginxの唯一の実行可能な解決策である場合、ユーザが認証された場合に常にクエリ文字列を追加するミドルウェアをDjangoに持たせる方法です。ありがとう – tdsymonds

+0

djangoのデフォルトでは、認証されたユーザのために 'sessionid'があります。 '$ cookie_nocache'を' $ cookie_sessionid'に変更することができます。クエリ文字列に 'cache = true'は不要です。簡単に言えば、クエリ文字列またはクッキーによってnginxキャッシュをバイパスすることができます。 – itzMEonTV

関連する問題