Назад | Перейти на главную страницу

Мои страницы не обслуживаются из кеша, но на самом деле nginx кэширует файлы

Я настроил сервер nginx в ubuntu в качестве обратного прокси-кеш-сервера. Мой код приложения находится в папке / var / www / myapp.

Ниже приведены конфигурации, которые я дал в

server {
        listen   80; ## listen for ipv4; this line is default and implied
        root /var/www/;
        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name localhost;

        location / {

            proxy_pass         http://127.0.0.1:8080/;
            rewrite ^([^.]*[^/])$ $1/ permanent;
            add_header X-Cache-Status $upstream_cache_status;
        }

        location /doc/ {
                alias /usr/share/doc/;
                autoindex on;
                allow 127.0.0.1;
                deny all;
        }
    }

это содержимое моего файла nginx / sites-available / default

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
        worker_connections 1024 ;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

         server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;
        gzip_disable "msie6";

         gzip_vary on;
          gzip_proxied any;
         gzip_comp_level 6;
         gzip_buffers 16 8k;
         gzip_http_version 1.1;
         gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;


        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;

        proxy_cache_path  /var/www/cache levels=1:2 keys_zone=my-cache:8m max_size=1000m inactive=600m;
        proxy_temp_path /var/www/cache/tmp;
        proxy_cache my-cache;
        proxy_cache_valid  200 302  60m;
        proxy_cache_valid  404      1m;

}

это содержимое моего файла nginx / nginx.conf

Nginx кэширует файлы в каталоге / var / www / cache

Но когда я проверяю ответ заголовка моей страницы http://mydomain.com/myapp в firefox с помощью firebug он показывает

Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection  keep-alive
Content-Encoding    gzip
Content-Length  3817
Content-Type    text/html; charset=utf-8
Date    Fri, 29 Mar 2013 10:19:23 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Pragma  no-cache
Server  nginx/1.1.19
Vary    Accept-Encoding
X-Cache-Status  MISS
X-Powered-By    PHP/5.3.10-1ubuntu3.6

X-Cache-Status - это MISS. Почему не обслуживается из кеша?

Редактировать: Я пропустил это в первый раз, но ваше приложение отправляет этот заголовок Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0 что предотвратит кеширование. Вы должны изменить свое приложение, чтобы не отправлять этот заголовок, если в этом нет необходимости.


Я пробовал ваши настройки и по первому запросу получаю MISS, что ожидаемо, поскольку его еще нет в кеше. При последующих запросах я получаю HIT.

Я использую версию 1.2.6, а вы - 1.1.9. в примечания к выпуску, похоже, есть несколько исправлений ошибок для кеширования между вашей версией и моей. Возможно, ваша конфигурация в порядке, но ваша версия глючит?

Вы также можете попробовать войти в систему, чтобы увидеть, что nginx говорит на стороне сервера:

log_format cache_status '[$time_local] "$request"  $upstream_cache_status';
access_log logs/cache.log cache_status;

Наряду с другими $upstream_ переменные, возможно, вы сможете получить дополнительную информацию о том, что идет не так, через ведение журнала.

Из: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_valid

Синтаксис: proxy_cache_valid [код ...] время;

...

Параметры кеширования также можно задать прямо в заголовке ответа. Это более высокий приоритет чем установка времени кеширования с помощью директивы.

  • В поле заголовка «X-Accel-Expires» задается время кеширования ответа в секундах. Нулевое значение отключает кеширование ответа. Если значение начинается с префикса @, оно устанавливает абсолютное время в секундах с начала эпохи, до которого ответ может быть кэширован.
  • Если в заголовке нет поля «X-Accel-Expires», параметры кеширования могут быть установлены в полях заголовка «Истекает» или
    «Кэш-контроль».
  • Если заголовок включает «Установить-Cookie» поле, такой ответ не будет кэшироваться.
  • Если заголовок включает поле «Vary» со специальным значением «*», такой ответ не будет кэшироваться (1.7.7). Если заголовок включает
    поле «Vary» с другим значением, такой ответ будет кеширован
    с учетом соответствующих полей заголовка запроса (1.7.7).

Обработку одного или нескольких из этих полей заголовка ответа можно отключить с помощью proxy_ignore_headers директива.

Установлено большинство веб-приложений Set-Cookie заголовок, поэтому ответ не будет кэшироваться. Чтобы исправить это, используйте эту директиву:

proxy_ignore_headers Set-Cookie;