digital-garden/dev/devops/nginx/Кэширование на стороне Nginx.md
2024-10-25 20:04:39 +03:00

70 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
aliases:
tags:
- maturity/🌱
date: 2024-04-07
---
Для повышения производительности можно кэшировать ответы на запросы на стороне Nginx, которые редко изменяются. Это позволяет серверу один раз получить результат от вашего приложения и в дальнейшем возвращать его другим клиентам, снижая нагрузку на приложение.
Для начала необходимо создать директорию, в которой будут храниться данные кэша:
```shell
sudo mkdir -p /var/nginx/cache
```
После этого, в основной конфигурационный файл `nginx.conf` нужно добавить несколько директив:
```nginx
http {
proxy_cache_path /var/nginx/cache levels=1:2 keys_zone=nginxcash:60m max_size=256m inactive=24h;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_methods GET HEAD;
proxy_cache_min_uses 2;
}
```
`proxy_cache_path` — указывает путь к директории, где будут храниться кэшированные данные.
- Параметр `levels` задает структуру папок для хранения кэша, keys_zone определяет размер зоны для хранения метаданных (в данном случае 60 мегабайт).
- `max_size=256m` задает максимальный размер кэша.
- `inactive=24h` указывает, что кэшированные данные, к которым не было обращений в течение 24 часов, будут автоматически удалены.
`proxy_cache_key` — определяет ключ кэширования. В данном случае используется комбинация схемы запроса, метода, хоста и URI. Этот ключ позволяет разделить кэш для разных поддоменов и запросов.
`proxy_cache_methods` — указывает, какие HTTP-методы будут кэшироваться (в данном примере — только методы GET и HEAD).
`proxy_cache_min_uses` — задает минимальное количество обращений к ресурсу перед его кэшированием. Установка значения 2 означает, что кэширование начнется только после второго обращения, что предотвращает кэширование редко используемых данных и снижает нагрузку на запись.
## Переносим кэш Nginx в RAM
Чтобы значительно ускорить кэш, можно разместить его в оперативной памяти (RAM) вместо файловой системы. Это позволит значительно сократить время доступа к кэшированным данным.
Для этого создаем директорию для кэша (если она уже создана, нужно очистить её от содержимого) и монтируем её в RAM с помощью [tmpfs](https://wiki.archlinux.org/index.php/Tmpfs). Выделим 256 мегабайт под кэш:
```shell
sudo mount -t tmpfs -o size=256M tmpfs /var/nginx/cache
```
Если потребуется отключить RAM-кэш, выполните команду:
```shell
sudo umount /var/nginx/cache
```
Чтобы автоматически пересоздавать кэш в RAM после перезагрузки системы, необходимо обновить файл `/etc/fstab`. Добавьте в него следующую строку:
```txt
tmpfs /var/nginx/cache tmpfs defaults,size=256M 0 0
```
***
## Мета информация
**Область**:: [[../../../meta/zero/00 Nginx|00 Nginx]]
**Родитель**:: [[../../architecture/Кэширование|Кэширование]]
**Источник**::
**Автор**::
**Создана**:: [[2024-04-07]]
### Дополнительные материалы
- [Оптимизация NGINX](https://struchkov.dev/blog/ru/nginx-optimization/)
- [Nginx cache: всё новое — хорошо забытое старое / Хабр](https://habr.com/ru/post/428127/)
- [[../../devops/nginx/Кэширование статики в Nginx|Кэширование статики в Nginx]]
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->