Что это
Веб-сервер и реверс-прокси — то, что принимает входящие запросы и решает, какому сервису их передать.
Как используем
Как входную точку почти каждого проекта: раздаёт статику, проксирует запросы к нужным контейнерам и проверяет доступ до того, как запрос попадёт дальше.
Где nginx нужен бизнесу
- На одном сервере несколько сайтов, и каждый должен открываться по своему домену с HTTPS.
- Страницу входа в админку пытаются подобрать, и это нужно гасить ещё до сайта.
- Часть сайта или поток трансляции должны видеть только свои.
- Сайт и VPN должны жить на одном порту и выглядеть снаружи одинаково.
Как мы это используем
- Один вход на все сайты. На сервере сайтов входной nginx принимает HTTP и HTTPS, завершает TLS и по имени сайта передаёт запрос нужному контейнеру. Неизвестные имена отбрасываются, по голому IP-адресу сервер не отдаёт ничего.
- SNI на одном порту. На входном узле VPN nginx читает имя сайта в начале TLS-соединения и решает, куда отправить поток: на сайт, в панель или в туннель.
- Проверка доступа. В «Переговорке» каждый запрос к трансляции и голосу проходит через
auth_request: перед отдачей nginx спрашивает сервис, вошёл ли человек. - Защита демо-стенда. На демо сайта музея nginx держит страж, заголовки безопасности, политику CSP, отказ известным скачивалкам и ограничение частоты запросов.
- Страница входа WordPress. После переезда с Joomla на входном nginx не больше 20 запросов в минуту к странице входа, служебные файлы закрыты.
Настройку сервера с nginx делаем в разделе Инфраструктура.
Типичные проблемы
- Новый сертификат не подхватился. certbot обновил файлы, а nginx продолжает отдавать старый сертификат до истечения. Нужен хук после продления, который заставляет nginx перечитать сертификат.
- Правка требует пересоздать контейнер. Конфигурацию монтируем каталогом целиком: тогда правка применяется перезагрузкой конфига, а живые сессии не рвутся.
- Лимит по IP не спасает от перебора. Пароль подбирают с разных адресов. В интернет-магазине блокировка считается по логину, а не только по адресу.
- Нестандартный тип файла. nginx не знает
.vcf, и телефон не открывает визитку как контакт. На сайте Валерия Афанасьева тип text/vcard прописан отдельно.
Когда это не нужно
Если сайт — статические страницы на хостинге вроде GitHub Pages, свой nginx не нужен: там уже есть HTTPS. И для одного бота на long polling без веб-интерфейса входной веб-сервер не требуется.