70 lines
4.8 KiB
Markdown
70 lines
4.8 KiB
Markdown
|
---
|
|||
|
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) -->
|