Nginx кэширование статики на стороне сервера

Nginx часто применяется в веб-проектах не в малой степени потому, что позволяет временно сохранять  контент сайтов. В Nginx кэширование настраивается очень просто (по сравнению с другими хранилищами) и является хорошим средством оптимизации работы веб-сервера.

 

Используется при больших нагрузках. Кэширование позволяет быстрее отдавать контент при втором и последующих обращениях к сайту. В блоге Nginx про кэширование.

 

Также кэширующие сервера легко кластеризуются

 

Чтобы кэширование nginx работало корректно в конфигурационном файле nginx.conf определяется путь к каталогу, в который будут складываться закэшированные на стороне сервера данные и задается его размер.

 

Рассматривается серверное кэширование и использование Nginx как хранилища. Браузерное кэширование задается проще.

 

Запускается веб-сервер в двух экземплярах на разных портах, обычно на разных машинах.

 

Кэширующий веб-сервер дает снижение нагрузки. Страница, один раз сгенерированная, сохраняется в кэш и отдается клиентам из него пока не истечет установленный TTL (time to live). Когда он истечет страница вновь будет сгенерирована и загружена в кэш — это требуется для того, чтобы посетитель сайта получал актуальную информацию.

 

 

Nginx кэширование: настройка

В примере закэшированные данные будут складываться на сервере 123.123.123.123 в каталог /var/cache/nginx. Максимальный размер файлов в кэше — 128 Мб, если этого буфера будет не хватать самые редко запрашиваемые данные будут вытесняться

 
nginx кэширование

 

На кэширующем Nginx сервере с адресом 123.123.123.123:

mcedit /etc/nginx/nginx.conf

http {
proxy_cache_path /var/nginx/cache levels=1:2 keys_zone=all:128m;
}

 

Каталог /var/nginx/cache нужно создать

mkdir -p /var/nginx/cache

 

 

Настройка виртуального хоста

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

 

mcedit /etc/nginx/sites-availible/example.com

server {
listen *:80;

server_name example.com;
access_log /var/log/nginx/access.log;

location / {

proxy_pass http://124.124.124.124:80/;
proxy_set_header Host $host;
proxy_buffering on;
proxy_cache all;
proxy_cache_valid any 30m;
proxy_cache_valid 200 1d;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;

}

 

В конфигурационном файле указано, что кэшировать нужно все содержимое, TTL установлен в 30 минут.

Виртуальный хост активируется

ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled

 

Затем требуется перечитать конфигурацию

nginx -s reload

 

 

На основном Nginx сервере с адресом 124.124.124.124:

Никаких изменений здесь вносить не требуется — можно при необходимости запустить веб-сервер на альтернативном порту.

 

mcedit /etc/nginx/sites-availible/example.com

server {
listen *:80;
server_name example.com;
proxy_read_timeout 200s;
access_log off;

root /var/www/sites/example.com/;

location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

}

}

 

Виртуальный хост также следует активировать стандартным образом.

ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled

nginx -s reload

 

Конфигурация может быть любой: Nginx + PHP-FPM или Nginx + Apache2 как в примере.

Добавляем файл index.php для того чтобы проверить кэширование

 

mcedit /var/www/sites/example.com/index.php

<?php

echo «Works!»;

?>

 

Теперь можно обратиться к сайту через браузер, «Works!» будет говорить о том, что запросы успешно перенаправляются.

 

 

На кэширующем Nginx сервере с адресом 123.123.123.123:

 

Теперь можно проверить появилось ли что-либо в каталоге, выделенном под хранилище данных

ls -la /var/nginx/cache/

total 20
drwxr-xr-x 5 www-data root 4096 июл 22 15:34 .
drwxr-xr-x 3 root root 4096 июл 22 14:58 ..
drwx—— 4 www-data www-data 4096 июл 22 15:41 2
drwx—— 3 www-data www-data 4096 июл 22 15:07 8
drwx—— 3 www-data www-data 4096 июл 22 15:34 c

 

Файлы присутствуют, что говорит об успешной настройке.

Nginx кэширование позволяет использовать несколько машин, они могут определяться через upstream. Обычно используется до 10 машин.