Веб-прокси nginx¶
Роль nginx в архитектуре¶
На боевом сервере nginx выполняет роль обратного прокси-сервера: принимает все входящие запросы из интернета и перенаправляет их нужному сервису в зависимости от доменного имени и пути запроса.
Внутренние сервисы (серверная часть, пользовательский интерфейс, документация) слушают только на локальном адресе --- напрямую из интернета они недоступны.
Домены и маршрутизация¶
| Домен | Куда перенаправляется | Порт назначения |
|---|---|---|
alfainft.monroe-tech.ru |
Пользовательский интерфейс React | localhost:3000 |
alfainft-api.monroe-tech.ru |
Серверная часть FastAPI | localhost:8000 |
alfainft-minio.monroe-tech.ru |
Консоль MinIO | localhost:9001 |
alfainft-docs.monroe-tech.ru |
Сайт документации MkDocs | localhost:8088 |
Файлы конфигурации¶
Конфигурации nginx хранятся в двух местах:
-
В репозитории --- каталог
nginx/:nginx.prod.conf--- основная конфигурация для серверной части и пользовательского интерфейсаalfainft-docs.conf--- конфигурация для сайта документацииnginx.conf--- конфигурация для локальной разработки
-
На сервере --- каталог
/etc/nginx/sites-available/с символическими ссылками из/etc/nginx/sites-enabled/.
Основная конфигурация¶
Файл nginx.prod.conf описывает обработку запросов к основному домену:
- Запросы с путём
/api/перенаправляются серверной части. К ним применяется ограничение частоты (10 запросов в секунду на один адрес клиента, с допуском до 20 запросов в пике). - Запрос
/healthперенаправляется на проверку здоровья серверной части. - Все остальные запросы попадают в пользовательский интерфейс.
Настройки безопасности:
- Заголовок
X-Frame-Options: SAMEORIGIN--- запрет встраивания страницы в чужие сайты. - Заголовок
X-Content-Type-Options: nosniff--- запрет браузеру угадывать тип содержимого. - Заголовок
X-XSS-Protection--- дополнительная защита от межсайтового выполнения скриптов. - Максимальный размер загружаемого файла --- 100 МБ (
client_max_body_size 100M).
Тайм-ауты для обращений к серверной части увеличены до 300 секунд (5 минут), так как обработка крупных файлов может занимать длительное время.
Сжатие включено для текстовых форматов (HTML, CSS, JSON, JavaScript, XML).
Конфигурация документации¶
Файл alfainft-docs.conf описывает отдельный виртуальный сервер для домена alfainft-docs.monroe-tech.ru. Все запросы перенаправляются на контейнер документации (localhost:8088).
SSL-сертификаты¶
Сертификаты выпускаются через Let's Encrypt с помощью утилиты certbot. В конфигурациях предусмотрен блок /.well-known/acme-challenge/ для прохождения проверки владения доменом.
После выпуска сертификата нужно:
- Раскомментировать блок HTTPS в соответствующем файле конфигурации.
- Включить перенаправление с HTTP на HTTPS.
- Перечитать конфигурацию nginx:
sudo nginx -t && sudo systemctl reload nginx
Пути к файлам сертификатов:
/etc/letsencrypt/live/<домен>/fullchain.pem # сертификат
/etc/letsencrypt/live/<домен>/privkey.pem # закрытый ключ
Размещение конфигурации на сервере¶
Для добавления нового домена (например, документации):
# Передать файл конфигурации
scp nginx/alfainft-docs.conf alfa:/etc/nginx/sites-available/
# Создать символическую ссылку
ssh alfa "ln -sf /etc/nginx/sites-available/alfainft-docs.conf /etc/nginx/sites-enabled/"
# Проверить конфигурацию
ssh alfa "nginx -t"
# Применить
ssh alfa "systemctl reload nginx"
Защита от индексации¶
Если требуется запретить поисковым системам индексировать сайт, в конфигурацию виртуального сервера можно добавить:
add_header X-Robots-Tag "noindex, nofollow" always;
Или создать файл robots.txt в корне сайта с содержимым:
User-agent: *
Disallow: /