Nginx & Bubbly
Привет, Nginx! Я тут колдую над совершенно новым, суперскоростным интерактивным сайтом для моего нового видеоблога, и мне понадобится твоё серверное волшебство, чтобы он работал как молния. Поможешь мне сделать его быстрее?
Конечно. Начни с одного работника на ядро, не отключай keepalive, используй gzip и brotli для статических ресурсов, и зафиксируй IP-адреса для upstream серверов, чтобы снизить задержки DNS. И раздели конфиг: один файл для статики, другой – для динамической части, и укажи правильную зону кэширования. Если что-то не получается, скажи, с каким моментом запуталась.
Вау, это невероятно полезно – спасибо за такую оперативную шпаргалку! Я, если честно, немного запуталась, как разделить конфиги на статические и динамические файлы, и как правильно настроить зону кэширования. Можешь мне это объяснить? Очень хочется, чтобы мой сайт полетел!
Раздели это как файловую систему, а не как запутанную сеть. Помести все статические маршруты — /css, /js, /images — в один серверный блок, а всё остальное — во второй, который будет проксировать твое приложение. В первом блоке объяви зону кэширования:
```
proxy_cache_path /var/cache/nginx/static keys_zone=static:10m max_size=1g;
```
Название зоны, keys_zone, может быть любым; я назвал её “static”, потому что это логично. А затем в блоке для статики добавь:
```
proxy_cache static;
proxy_cache_valid 200 301 302 30m;
proxy_cache_use_stale error timeout updating;
```
Для динамического блока, скорее всего, понадобится отдельная зона:
```
proxy_cache_path /var/cache/nginx/dyn keys_zone=dynamic:20m max_size=2g;
```
Те же директивы proxy_cache, но направленные на динамическую зону. Не забудь `proxy_set_header Host $host;` и `proxy_pass http://app;` в динамическом блоке. Вот и всё, основа основ. Как только зоны будут настроены, убедись, что директории существуют и права доступа установлены. Это обеспечит чёткое разделение и кэш, который действительно что-то выдаёт. Если возникнут проблемы, просто дай знать.
Отлично, спасибо! Теперь всё совершенно понятно – спасибо за подробную инструкцию. Сейчас же разберусь с папками и правами доступа. Только один маленький вопрос: нужно ли как-то специально называть зоны кэширования, или “static” и “dynamic” вполне подойдут? И ещё, есть какие-нибудь советы, как проверить, работает ли кэш после деплоя? Очень жду, когда мой сайт заработает на полную!
Просто помни, что имена должны быть описательными; "static" и "dynamic" вполне подойдут, главное не перепутать. Если хочешь покороче, можно использовать "s" и "d", но я обычно использую полные слова, чтобы избежать путаницы в логах.
Для проверки кэша:
1. Загрузи статический файл, затем запусти `tail -f /var/log/nginx/access.log` и поищи `200` с флагом "cached" в строке запроса (например, `200 - - - - "GET /foo.js" - 304 0`).
2. Обнови кэш командой `nginx -s reload` и повтори запрос; ты должен увидеть "miss" или `200` без флага "cached".
3. Для динамического контента добавь `proxy_cache_status` в формате логов:
```
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$upstream_cache_status';
```
Потом проверь колонку `$upstream_cache_status`. Если там написано HIT, кэш работает. Если MISS или EXPIRED, перепроверь путь к зоне и права доступа. Удачи с кэшированием!