DRX INFRA Написать

nginx или HAProxy перед Directum RX

Веб-сервер перед системой принимает подключения пользователей, расшифровывает TLS и передаёт запросы дальше. От него зависит, пройдёт ли система проверку безопасности, загрузится ли документ на 300 МБ и не оборвётся ли долгая операция. Введите адреса и получите готовый файл для nginx или HAProxy.

1 · Адреса

Чем проксируем
Второй сервер RX

2 · Сертификат и лимиты

3 · Что получилось

    Меняете поле, файл ниже пересчитывается сразу. Адрес страницы запоминает введённое.

    Файл конфигурации

    Включите JavaScript, чтобы увидеть файл.
    1. Проверьте и примените

      
                

      Перечитывание конфигурации не обрывает открытые соединения. Если проверка нашла ошибку, работающая конфигурация не меняется.

    2. Убедитесь, что старые TLS закрыты

      
                

      Первые две команды должны закончиться ошибкой соединения, третья показать сертификат. Последняя печатает защитные заголовки.

    Для nginx проверьте общий nginx.conf. В Debian и Ubuntu в секции http штатного файла записано ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3. Наш файл перекрывает это для своего сайта, но на остальных сайтах того же сервера старые протоколы останутся включены.

    Что делает каждая часть

    Это обратный прокси: один адрес снаружи, система внутри. Балансировка появляется только если серверов RX два.

    TLS: протоколы и шифры

    Разрешены только TLS 1.2 и 1.3. Версии 1.0 и 1.1 сняты с поддержки браузерами в 2020 году, и их наличие считается замечанием на любой проверке безопасности. Набор шифров взят из рекомендаций Mozilla для профиля Intermediate: его понимают все браузеры за последние годы и .NET-клиенты. Билеты сессий выключены, чтобы ключи не жили дольше перезапуска.

    Сертификат с цепочкой

    В файле сертификата должны лежать по порядку сертификат сайта и промежуточные сертификаты удостоверяющего центра. Браузер умеет достроить цепочку сам и не покажет ошибку, а мобильное приложение, интеграции и сервисы на .NET и Java откажутся подключаться. Проверить можно командой из второго шага: в выводе должно быть больше одного сертификата.

    Заголовки: HSTS и остальные

    Strict-Transport-Security запрещает браузеру ходить на сайт по HTTP целый год, поэтому включайте его, когда HTTPS уже работает надёжно. X-Content-Type-Options и X-Frame-Options закрывают подмену типа содержимого и встраивание страницы в чужой сайт. Политику содержимого (CSP) файл не задаёт: её нужно подбирать под конкретную версию веб-клиента, иначе он перестанет работать.

    WebSocket

    Веб-клиент держит постоянное соединение с сервером для уведомлений. Без заголовков Upgrade и Connection прокси превращает его в обычный запрос, и клиент каждые несколько секунд переподключается. Внешне это выглядит как запаздывающие уведомления и лишняя нагрузка.

    Большие документы и долгие операции

    Лимит тела запроса у nginx по умолчанию 1 МБ, и загрузка любого документа крупнее заканчивается ошибкой 413. Буферизация запроса выключена: файл передаётся в систему по мере получения, а не складывается сначала на диск прокси. Время ожидания ответа по умолчанию 60 секунд, отчёты и массовые операции идут дольше и получают 504, хотя сама операция выполняется.

    Сжатие

    Веб-клиент RX это несколько мегабайт скриптов и стилей. Со сжатием первая загрузка страницы идёт в три-четыре раза быстрее, особенно через VPN и с мобильной связи. На одном из контуров мы получили 1,5 МБ вместо 5,75 МБ одной строкой в конфигурации.

    Второй сервер: резерв или оба в работе

    «Резерв» это привычная схема: все запросы идут на первый сервер, второй получает их, только когда первый перестал отвечать. Половина оборудования при этом простаивает. «Оба в работе» распределяет запросы по правилу наименьшего числа соединений. Для RX оно подходит лучше поочерёдной раздачи, потому что соединения уведомлений живут часами.

    У схемы с двумя активными серверами два условия. Оба сервера смотрят в одну базу, один брокер и одно хранилище. Запросы уведомлений (/Centrifugo) и публикации разработки (/Client/api/deploy) должны попадать на один и тот же сервер, поэтому для них сделана привязка.

    nginx или HAProxy

    Для одного сервера RX разницы почти нет, берите то, что уже стоит. Для двух серверов HAProxy удобнее по двум причинам. Он сам опрашивает адрес проверки здоровья и выводит сервер из работы до того, как это заметят пользователи. Бесплатный nginx узнаёт об отказе только по неудавшимся запросам. И привязку HAProxy делает по cookie, а бесплатный nginx по адресу клиента: все сотрудники за одним выходом в интернет окажутся на одном сервере.

    Адрес /Client и проверка здоровья

    Веб-клиент RX открывается по адресу /Client, поэтому корень сайта перенаправляется туда. Адрес /Client/api/health отдаёт состояние сервиса и нужен балансировщику. Снаружи он закрыт: посторонним незачем знать, какие части системы сейчас не работают.

    Чего здесь нет: ограничения частоты запросов, защиты от перебора паролей и правил сетевого экрана уровня приложений. Это настраивается под конкретную систему и её интеграции.

    Отчёт rxdoctor показывает сертификат, версии TLS и заголовки пунктами с WEB-02 по WEB-05. О программе