Краткий ответ
- Nginx — высокопроизводительный веб‑сервер и reverse‑proxy: раздача статики, проксирование к приложениям, балансировка нагрузки, терминация TLS/SSL, кеширование и сжатие.
- Подходит для SPA и API: статика через
root, backend через proxy_pass, HTTPS с Let’s Encrypt, HTTP/2, gzip/Brotli.
- Опыт: настройка reverse‑proxy для Node.js, кеш статики, заголовки, rate‑limiting, перезапуски без простоя.
Полный ответ
Основные роли
- Веб‑сервер: раздаёт статические файлы.
- Reverse‑proxy: принимает запросы и переадресует на backend.
- Балансировщик: распределяет нагрузку между несколькими приложениями.
- Терминация TLS/SSL: шифрование трафика.
- Кеш/сжатие: ускоряет ответы и уменьшает трафик.
Мини‑конфиг (статика + proxy)
server {
listen 80;
server_name example.com;
root /var/www/html;
location /api/ {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
HTTPS и HTTP/2
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}
Кеш и сжатие
gzip on;
gzip_types text/css application/javascript application/json;
expires 1y;
add_header Cache-Control "public, immutable";
Частые ошибки
- Забытые заголовки
Host и X-Forwarded-For при proxy.
- Неверные шаблоны
location и пробелы/слэши в proxy_pass.
- Включение HTTP/2 только на 443.
- Отсутствие кеш‑политики и компрессии для статики.
Рекомендации
- Проверяйте конфиг (
nginx -t) и делайте атомарный reload.
- Разделяйте файлы конфигурации и поддерживайте единые политики кеша/безопасности.
- Используйте rate‑limiting для защиты от бурстов.