2017-10-27 19 views
1

nginx uwsgiキャッシングを使用して、私のuwsgi djangoアプリケーションでビューをキャッシュしようとしています。nginxでuwsgi結果をキャッシュできません

ほとんどの場合、キャッシュに何も書き込まれていないようです。​​キャッシュフォルダが作成されますが、何も書き込まれません。

cache_page djangoデコレータをmy_cached_pa​​geビューにも適用しました。その結果、getは適切にdjango自身とブラウザによってキャッシュされます。

しかし、私はnginxにすべての人のために結果をキャッシュして返すようにします。私はuwsgi_ignore_headersを使ってuwsgiアプリケーションからSet-Cookieヘッダーを無視しましたが、何の影響もないようです。

どのような場合に結果がキャッシュされるか(より重要なことに、キャッシュされない)よりよく理解しようとしています。私はおそらく、djangoアプリは結果をキャッシュするためにnginxの正しいヘッダを返さないと思う。

nginxのバージョン1.11.2

http { 
    include  mime.types; 
    log_format main '[$time_local] "$request" $status - $body_bytes_sent - $upstream_cache_status'; 

    charset     utf-8; 
    client_max_body_size 300M; 
    access_log /var/log/nginx/access.log main; 

    uwsgi_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g 
        inactive=60m use_temp_path=off; 

    sendfile  on; 
    sendfile_max_chunk 512k; 
    tcp_nopush  on; 
    tcp_nodelay  on; 

    gzip   on; 
    gzip_min_length 1000; 
    gzip_comp_level 6; 
    gzip_types text/plain text/css application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+xml; 
    gzip_buffers 16 8k; 

    uwsgi_buffering on; 
    uwsgi_buffers 8 16k; 
    keepalive_timeout 65; 

    uwsgi_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10ginactive=60m use_temp_path=off; 


    server { 
     listen 80 default_server; 
     root /opt/my-app/app-web/; 

     location /my_cached_page { 
      add_header X-Cache-Status $upstream_cache_status; 

      uwsgi_cache my_cache; 
      uwsgi_cache_bypass 0; 
      uwsgi_cache_use_stale error timeout updating http_500; 
      uwsgi_cache_valid 200 120s; 
      uwsgi_cache_key $scheme$host$request_uri; 

      uwsgi_ignore_headers Set-Cookie; 
      uwsgi_ignore_headers Cache-Control; 
      uwsgi_ignore_headers Vary; 

      uwsgi_hide_header Cache-Control; 
      uwsgi_hide_header Set-Cookie; 
      uwsgi_hide_header Vary; 
      include uwsgi_params; 
      uwsgi_pass unix:///var/run/nginx/app-web.sock; 
     } 
    } 
} 

リクエストヘッダ:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 
Accept-Encoding:gzip, deflate 
Accept-Language:en-US,en;q=0.9 
Cache-Control:max-age=0 
Connection:keep-alive 
Cookie:__utma=61648882.1536382292.1506014184.1506473601.1506544386.6; __utmz=61648882.1506362749.4.4.utmcsr=local.app.com|utmccn=(referral)| __utma=140397870.1982377192.1504030918.1506816584.1506830154.138; __utmz=140397870.1504030918.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); csrftoken=3nGSYk4QF0y2gqlxbiexCgdyelk; sessionidpl=b0af1l4h0zy2mbos9skpwlvrr 
Host:local.app.com 
Upgrade-Insecure-Requests:1 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36 

レスポンスヘッダ:

Cache-Control:max-age=900 
Connection:keep-alive 
Content-Encoding:gzip 
Content-Type:text/html; charset=utf-8 
Date:Fri, 27 Oct 2017 01:53:49 GMT 
Expires:Fri, 27 Oct 2017 02:08:49 GMT 
Last-Modified:Fri, 27 Oct 2017 01:53:49 GMT 
Server:nginx 
Set-Cookie:csrftoken=3nGSYk4QF0y2gqlxbiexCgdyelkPnUog; expires=Fri, 26-Oct-2018 01:53:49 GMT; Max-Age=31449600; Path=/;httponly 
Set-Cookie:sessionidpl=b0af1l4h0zy2mbos9skpwlvrr012eu4w; expires=Sun, 26-Nov-2017 01:53:25 GMT; httponly; Max-Age=2591976; Path=/ 
Transfer-Encoding:chunked 
Vary:Cookie 
X-Cache-Status:MISS 
X-Frame-Options:SAMEORIGIN 

答えて

1

私はこの問題では、設定を定義する方法であると思います。 Nginxはただ一つのuwsgi_ignore_headersディレクティブを期待していますが、あなたは3つを提供しています - これらの2つは無視されます。設定を次の場所に更新してみてください。

uwsgi_ignore_headers Set-Cookie Cache-Control Vary; 
+0

これは実際問題で、驚くべきことでした。どうもありがとうございます ! –

関連する問題