Ответ
Nginx — это высокопроизводительный, асинхронный веб-сервер с событийной архитектурой, который в DevOps используется в трех основных ролях: веб-сервер, обратный прокси (reverse proxy) и балансировщик нагрузки (load balancer). Его эффективность при работе с большим количеством одновременных соединений делает его стандартом для высоконагруженных систем.
Типичные сценарии использования в DevOps:
-
Обратный прокси и балансировщик нагрузки для микросервисов: Nginx принимает входящие запросы и распределяет их между несколькими экземплярами backend-приложения (например, Node.js, Go или Python-сервисов), работающими в контейнерах.
upstream backend_servers { least_conn; # Алгоритм балансировки server backend1.example.com:8080; server backend2.example.com:8080; server backend3.example.com:8080; } server { listen 80; server_name api.myapp.com; location / { proxy_pass http://backend_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } -
Раздача статического контента и SSL-терминация: Nginx эффективно отдает статические файлы (CSS, JS, изображения), разгружая application-серверы. Также он часто служит точкой для терминации SSL/TLS-соединений.
server { listen 443 ssl http2; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; location /static/ { root /var/www/html; expires 30d; # Кэширование в браузере } location / { proxy_pass http://localhost:3000; # Прокси на Node.js приложение } } -
Кэширование ответов бекенда: Уменьшает нагрузку на приложение, кэшируя динамические ответы.
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g; server { location / { proxy_cache my_cache; proxy_cache_valid 200 302 10m; proxy_pass http://backend; } } -
Ingress Controller в Kubernetes: Ingress-Nginx — это самый популярный Ingress Controller для Kubernetes. Он использует Nginx под капотом для маршрутизации внешнего HTTP(S)-трафика в сервисы внутри кластера на основе правил, описанных в ресурсах Ingress.
Преимущества для DevOps:
- Конфигурация как код: Конфиг-файлы легко версионировать в Git.
- Легковесность и производительность: Малые накладные расходы на память и CPU.
- Гибкость: Огромное количество директив для перезаписи URL, аутентификации, ограничения запросов (rate limiting).
- Широкая распространенность: Стандарт де-факто, обширное комьюнити и документация.