Ответ
Nginx — это высокопроизводительный веб-сервер с событийно-ориентированной (event-driven), асинхронной архитектурой. Он также широко используется как обратный прокси-сервер (reverse proxy), балансировщик нагрузки и кеширующий прокси.
Основные сценарии использования в DevOps/инфраструктуре:
- Веб-сервер для статического контента: Обработка HTML, CSS, JS, изображений с очень высокой скоростью и низким потреблением памяти.
- Обратный прокси для бэкенд-приложений: Nginx принимает HTTP-запросы от клиентов и перенаправляет их на один или несколько бэкенд-серверов (например, приложения на Go, Python, Java, PHP-FPM). Это позволяет:
- Разгрузить бэкенд-сервисы от работы с медленными клиентами.
- Выполнять SSL/TLS termination (расшифровку HTTPS).
- Осуществлять базовую маршрутизацию и перезапись URL.
- Балансировщик нагрузки: Распределение входящего трафика между несколькими экземплярами приложения для повышения отказоустойчивости и производительности.
- Кеширование: Кеширование ответов от бэкенд-серверов для значительного ускорения отдачи контента повторяющимся запросам.
Пример конфигурации Nginx в качестве обратного прокси и балансировщика нагрузки для Python (Django/Gunicorn) приложения:
# Основной конфиг nginx.conf (фрагмент)
http {
upstream django_backend {
# Определяем группу бэкенд-серверов.
# Используем least_conn для балансировки на основе наименьшего числа соединений.
least_conn;
server 10.0.1.10:8000; # Экземпляр приложения 1
server 10.0.1.11:8000; # Экземпляр приложения 2
server 10.0.1.12:8000 backup; # Резервный экземпляр
}
server {
listen 80;
server_name api.example.com;
location / {
# Проксируем все запросы в группу бэкендов
proxy_pass http://django_backend;
# Стандартные заголовки для корректной работы бэкенда
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;
# Настройки таймаутов
proxy_connect_timeout 5s;
proxy_read_timeout 60s;
}
# Обслуживание статических файлов напрямую через Nginx (эффективнее)
location /static/ {
alias /opt/myapp/static/;
expires 1y;
add_header Cache-Control "public, immutable";
}
}
}
Благодаря своей стабильности и эффективности, Nginx является одним из фундаментальных компонентов современной веб-инфраструктуры.