Ответ
Nginx часто используется как обратный прокси (reverse proxy). Он принимает клиентские запросы и перенаправляет их на один или несколько бэкенд-серверов (например, на Python-приложение, работающее через Gunicorn или uWSGI). Это позволяет скрыть внутреннюю архитектуру, распределять нагрузку и обрабатывать SSL.
Пример базовой конфигурации для проксирования запросов на приложение, работающее на localhost:8000:
server {
# Nginx будет слушать 80 порт
listen 80;
# Доменное имя, на которое будет отзываться сервер
server_name example.com;
location / {
# Перенаправляем все запросы на внутренний сервер
proxy_pass http://127.0.0.1:8000;
# Передаем важные заголовки, чтобы приложение знало
# реальный хост и IP-адрес клиента
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;
}
}
Ключевые задачи обратного прокси:
- Балансировка нагрузки: Распределение запросов между несколькими экземплярами приложения.
- SSL/TLS Termination: Обработка HTTPS-запросов, снимая эту нагрузку с бэкенд-серверов.
- Кэширование: Сохранение статических ответов для ускорения отдачи контента.
- Безопасность: Фильтрация вредоносных запросов и сокрытие IP-адресов внутренних серверов.
Ответ 18+ 🔞
А, Nginx, ёпта, классика жанра! Этот чувак у нас работает как обратный прокси, то есть типа такой главный приёмщик-разводящий. Сидит себе на порту, улыбается, клиентов встречает, а потом — хрясь! — и перекидывает всю их ебучую работу куда подальше, на задворки, на какие-нибудь бэкенды, которые на Python под Gunicorn'ом копошатся. Красота! Сервера спрятаны, нагрузка распределена, SSL он сам отгрызёт — красавчик, блядь.
Смотри, как это примерно выглядит в конфиге, если твоё приложение дрыхнет на localhost:8000:
server {
# Слушаем 80-й, как все приличные люди
listen 80;
# А отзываемся на этот самый домен
server_name example.com;
location / {
# И вот тут магия: всё, что пришло, — на тебе, получай на бэкенд!
proxy_pass http://127.0.0.1:8000;
# А это чтобы бэкенд не обделался и понял, кто и откуда к нему пришёл
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;
}
}
И что же этот красавец умеет, кроме как запросы пересылать?
- Балансировку нагрузки, ёбушки-воробушки! Как швейцар в дорогом борделе: видит, что один сервер уже заёбан, а другой прохлаждается — и нового клиента сразу ко второму. Честно, без очередей.
- SSL/TLS Termination — это когда он весь этот криптографический пиздец с сертификатами и рукопожатиями берёт на себя, а к бэкенду уже чистое, понятное HTTP приходит. Бэкенд аж плачет от счастья, нагрузка-то с него снята.
- Кэширование — ну тут вообще песня. Если контент статичный, он его припрячет и в следующий раз отдаст мгновенно, даже бубенцов не тронет. Скорость — овердохуища!
- Безопасность — он как верный пёс: лишних не пустит, подозрительные запросы отфильтрует, да и адреса внутренних серваков спрячет, чтобы всякие пидарасы шерстяные не налетели. В общем, доверия ебать ноль, но к нему — есть.