Этот вопрос проверяет понимание того, что такое NGINX, зачем он используется в веб-инфраструктуре и какие основные роли может выполнять (web-сервер, reverse proxy, балансировщик нагрузки и т.д.).
Определение: NGINX — это высокопроизводительный веб-сервер и обратный прокси-сервер (reverse proxy), который часто используется для обслуживания веб-приложений.
Он умеет отдавать статические файлы, проксировать запросы на backend-приложения (Django, Flask, Node.js и др.), балансировать нагрузку между несколькими серверами и завершать TLS (HTTPS). Благодаря событийной архитектуре NGINX хорошо справляется с большим количеством одновременных подключений. Его часто ставят «перед» приложением как «фронт» для обработки HTTP/HTTPS, логирования, кэширования и защиты. В типичной схеме NGINX принимает запросы от клиента и перенаправляет их на backend, например, на приложение на Django или FastAPI.
Определение:
NGINX — это высокопроизводительный веб-сервер и обратный прокси-сервер (reverse proxy), который также может выступать как балансировщик нагрузки, кэширующий прокси и терминатор TLS.
Ключевые особенности:
Высокая производительность:
Использует неблокирующую событийную архитектуру.
Хорошо масштабируется при большом количестве одновременных соединений.
Гибкость:
Может работать как:
web-сервер (отдача статических файлов),
reverse proxy для backend-приложений,
балансировщик нагрузки,
кэширующий прокси.
Широкое применение:
Используется как фронт для приложений на Django, Flask, Node.js, PHP и др.
NGINX может напрямую отдавать:
статический HTML,
CSS, JavaScript,
изображения,
файлы загрузки.
Пример: у вас есть frontend (статические файлы), который можно отдавать напрямую NGINX, а backend-приложение обрабатывает только API.
NGINX config
server {
listen 80;
server_name example.com;
root /var/www/static_site;
location / {
try_files $uri $uri/ =404;
}
}
Обычно приложение (Django, Flask и т.д.) слушает на localhost:8000 или другом порту и не выставляется напрямую в интернет. NGINX стоит перед ним и проксирует запросы.
NGINX config
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8000;
# здесь также часто настраивают заголовки, timeout'ы и пр.
}
}
Зачем это нужно:
безопасность (backend не торчит наружу),
удобная конфигурация HTTPS,
логирование,
сжатие и кэширование.
Если у вас несколько backend-серверов, NGINX может распределять между ними запросы.
NGINX config
upstream backend_app {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
# можно настраивать веса, проверки состояния и т.п.
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_app;
}
}
Преимущества:
увеличение отказоустойчивости,
масштабирование по горизонтали (добавление новых серверов).
NGINX часто используют для окончания TLS-сессии:
Клиент устанавливает HTTPS-соединение с NGINX.
NGINX расшифровывает трафик и проксирует обычный HTTP на backend.
Плюсы:
все управление сертификатами сосредоточено в одном месте,
backend-ы могут работать по простому HTTP внутри приватной сети.
NGINX умеет:
кэшировать ответы backend-сервера,
сжимать ответы (gzip и др.),
уменьшать нагрузку на backend и ускорять отдачу данных пользователям.
Частая конфигурация:
Клиент → NGINX (порт 80/443).
NGINX:
отдает статические файлы,
проксирует запросы /api/ на backend.
Backend:
Django/Flask/FastAPI под управлением gunicorn/uvicorn/uwsgi на 127.0.0.1:8000.
Преимущества такой схемы:
NGINX занимается сетевыми задачами и статикой.
Приложение фокусируется на бизнес-логике.
Масштабировать backend проще (добавить несколько процессов или серверов).
NGINX — это универсальный и очень быстрый web-сервер и reverse proxy.
Он решает задачи отдачи статики, проксирования запросов, балансировки нагрузки и работы с HTTPS.
В типичной архитектуре Python-приложения NGINX стоит перед приложением и берет на себя сетевую часть и инфраструктурные задачи.