Nginx часто применяется в веб-проектах не в малой степени потому, что позволяет временно сохранять контент сайтов. В Nginx кэширование настраивается очень просто (по сравнению с другими хранилищами) и является хорошим средством оптимизации работы веб-сервера.
Используется при больших нагрузках. Кэширование позволяет быстрее отдавать контент при втором и последующих обращениях к сайту. В блоге Nginx про кэширование.
Также кэширующие сервера легко кластеризуются
Чтобы кэширование nginx работало корректно в конфигурационном файле nginx.conf определяется путь к каталогу, в который будут складываться закэшированные на стороне сервера данные и задается его размер.
Рассматривается серверное кэширование и использование Nginx как хранилища. Браузерное кэширование задается одним блоком в настройках.
Запускается веб-сервер в двух экземплярах на разных портах, обычно на разных машинах.
Кэширующий веб-сервер дает снижение нагрузки. Страница, один раз сгенерированная, сохраняется в кэш и отдается клиентам из него пока не истечет установленный TTL (time to live). Когда он истечет страница вновь будет сгенерирована и загружена в кэш — это требуется для того, чтобы посетитель сайта получал актуальную информацию.
Nginx кэширование: настройка
В примере закэшированные данные будут складываться на сервере 123.123.123.123 в каталог /var/cache/nginx. Максимальный размер файлов в кэше — 128 Мб, если этого буфера будет не хватать самые редко запрашиваемые данные будут вытесняться
На кэширующем 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;
}
}
Виртуальный хост также нужно активировать. Затем перечитать конфигурацию выполнив nginx -s reload
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 серверов.