Nginx отключить кэширование для сессии. Сжатие и кеширование браузером для NGINX. Динамическое «окно» в закэшированной странице

|

Nginx включает в себя модуль FastCGI, который позволяет использовать директивы для кэширования динамического контента в интерфейсе PHP. FastCGI устраняет необходимость искать дополнительные решения для кэширования страниц (например, обратные прокси или специальные плагины приложений). Контент также может быть исключен из кэширования на основе метода запроса, URL, cookies или любой другой переменной сервера.

Активация кэширования FastCGI

Чтобы следовать данному руководству, нужно заранее . Также нужно отредактировать конфигурационный файл виртуального хоста:

nano /etc/nginx/sites-enabled/vhost

Внесите следующие строки в начало файла вне директивы server { } :

Директива fastcgi_cache_path задает путь к кэшу (/etc/nginx/cache), указывает его размер (100m), имя зоны памяти (MYAPP), уровни подкаталогов и таймер inactive.

Кэш можно размещать в любой удобной точке жесткого диска. Максимальный размер кеша не должен превышать RAM сервера+размер swap-файла; в противном случае будет выведена ошибка Cannot allocate memory. Если кэш не был использован в течение конкретного периода времени, указанного с помощью опции «inactive» ​​(в данном случае это 60 минут), то Nginx удаляет его.

Директива fastcgi_cache_key указывает способ хеширования имен файлов. Согласно данным настройкам, Nginx будет шифровать файлы с помощью MD5.

Теперь можно перейти к директиве location, которая передает PHP-запросы модулю php5-fpm. В location ~ .php$ { } внесите следующие строки:

fastcgi_cache MYAPP;
fastcgi_cache_valid 200 60m;

Директива fastcgi_cache ссылается на зону памяти, которая уже была указана в директиве fastcgi_cache_path.

По умолчанию Nginx хранит кешированные объекты в течение времени, указанного с помощью одного из этих заголовков:

X-Accel-Expires
Expires
Cache-Control.

Директива fastcgi_cache_valid указывает срок хранения кэша по умолчанию, если ни одного из этих заголовков нет. Согласно установленному значению кэшируются только ответы с кодом состояния 200 (конечно, можно указать и другие коды состояния).

Проверьте настройки FastCGI

service nginx configtest

Затем перезапустите Nginx, если с настройками все в порядке.

service nginx reload

На данном этапе файл vhost должен иметь следующий вид:

fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
server {
listen 80;
root /usr/share/nginx/html;
index index.php index.html index.htm;
server_name example.com;
location / {
try_files $uri $uri/ /index.html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_cache MYAPP;
fastcgi_cache_valid 200 60m;
}
}

Теперь нужно проверить, работает ли кеширование.

Проверка кэширования FastCGI

Создайте PHP-файл, который выводит метку времени UNIX.

/usr/share/nginx/html/time.php

Внесите в файл:

Затем несколько раз запросите данный файл через curl или веб-браузер.

root@server:~# curl http://localhost/time.php;echo
1382986152

1382986152
root@server:~# curl http://localhost/time.php;echo
1382986152

Если кеширование выполняется должным образом, временная отметка всех запросов будет совпадать (поскольку ответ был кеширован).

Чтобы найти кэш этого запроса, нужно выполнить обратную запись кэша

root@server:~# ls -lR /etc/nginx/cache/
/etc/nginx/cache/:
total 0
drwx------ 3 www-data www-data 60 Oct 28 18:53 e
/etc/nginx/cache/e:
total 0
drwx------ 2 www-data www-data 60 Oct 28 18:53 18
/etc/nginx/cache/e/18:
total 4
-rw------- 1 www-data www-data 117 Oct 28 18:53

Можно также добавить заголовок X-Cache, который укажет, что данный запрос был обработан из кеша (X-Cache HIT) или напрямую (X-Cache MISS).

Над директивой server { } внесите:

add_header X-Cache $upstream_cache_status;

Перезапустите сервис Nginx и выполните подробный запрос с помощью curl, чтобы увидеть новый заголовок.

root@server:~# curl -v http://localhost/time.php
* About to connect() to localhost port 80 (#0)
* Trying 127.0.0.1...
* connected
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET /time.php HTTP/1.1
> User-Agent: curl/7.26.0
> Host: localhost
> Accept: */*
>
* HTTP 1.1 or later with persistent connection, pipelining supported
< HTTP/1.1 200 OK
< Server: nginx
< Date: Tue, 29 Oct 2013 11:24:04 GMT
< Content-Type: text/html
< Transfer-Encoding: chunked
< Connection: keep-alive
< X-Cache: HIT

Отправьте POST-запрос на этот файл с URL, который нужно очистить.

curl -d "url=http://www.example.com/time.php" http://localhost/purge.php

Скрипт выдаст true или false в зависимости от того, был очищен кш или нет. Обязательно исключите этот скрипт из кэширования, а также не забудьте ограничить доступ к нему.

Tags: ,

Кэширование данных на стороне клиента - возможность настроить разовую загрузку данных определенного типа с последующим их сохранением в памяти клиента. Кэширование браузера nginx или средствами другого сервера позволяет сократить количество обращений со стороны клиентской машины, и, как следствие, нагрузку, а также увеличить скорость загрузки сайтов.

Т.е. клиент обращается к странице сайта — сервер обрабатывает запрос, сгенерированная страница отправляется клиенту вместе с определенным заголовком. Браузер сохраняет информацию локально и при повторном запросе самостоятельно отдает ее.

Кэшируются изображения стили CSS и Javascript. Кэширование браузера Nginx реализуется за счет добавления заголовка Cache-control .

В заголовках служебная информация передается от сервера браузеру клиента, из нее браузер узнает когда нужно сохранять данные определенного типа и как долго удерживать их в памяти.

Кэширование браузера Nginx

В конфигурационном файле Nginx кэширование JS/CSS включается следующим образом (добавлены и другие расширения — на практике лучше кэшировать их все):

server {

location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ {
expires max;
root /home/website/example.com/;
}

}

expires max говорит о том, что TTL устанавливается в бесконечность и в случае если файлы на сервере будут изменены клиент об этом никогда не узнает поскольку повторный запрос отправлен не будет.

expires (об этом заголовке речь пойдет ниже) определяет когда брузер обновит кэш, значение устанавливается в секундах.

Обычно в конфиге сервера устанавливается именно значение expires max, затем в приложении при подключении css и js файлов определяются их версии, которые должны меняться каждый раз при обновлении содержимого.

Указание заголовков, задающих кэширование на уровне приложения

Сервер в этом случае будет воспринимать каждую новую версию как добавленный новый файл и будет кэшировать его.

Вместе с Cache-Control часто указывается заголовок Expires — он принудительно задает дату и время, когда браузер сбросит существующий кэш; при следующем обращении к пользователя обновленные данные будут загружены в кэш повторно.

Дополнительный заголовок HTTP Expires указывает дату и время, когда браузер должен обновить кэш (заголовки можно использовать совместно, Expires при использовании обоих заголовков имеет меньшее значение):

Оба заголовка могут быть заданы в программном коде на уровне приложения.

Включение кэширования в РНР

Большая часть веб-проектов пишутся на языке РНР, в РНР HTTP заголовки Cache-control и Expires задаются следующим образом:

 
Статьи по теме:
Как сделать удобной работу с большим количеством вкладок в браузере
Вы сможете работать за компьютером быстрее, если оптимально расположите окна и вкладки браузера. Как быстро переключаться между окнами Нажмите и удерживайте клавишу Alt . Затем нажмите и удерживайте Tab , пока не откроется нужное окно. Как просматривать д
Установка и удаление AVG Internet Security Антивирус авг как включить компонент программы
В этом уроке мы рассмотрим, как установить бесплатный антивирус AVG. Почему именно бесплатный? Этот и другие вопросы я подробно опишу ниже! Сегодня проводить время в Интернете без защиты очень опасно, особенно новичку. Под защитой я подразумеваю антивир
Проверенные безопасные способы
С целью заработка в интернете многие пользователи запускают каналы на Ютубе. Идея хорошая, только без качественных роликов и грамотной раскрутки, никогда не получится зарабатывать большие деньги. Контент играет ключевую роль, а публикуя
Сервисы распознования капчи Автоматическое распознавание капчи
Здравствуйте, уважаемые читатели блога сайт. Антикапча (временно это был Антигейт) – это многофункциональная площадка для автоматического распознавания так называемой капчи (защиты от автоматического постинга ботами, а также защиты поисковиков от парсинг