Веб-сервер перед системой принимает подключения пользователей, расшифровывает TLS и передаёт запросы дальше. От него зависит, пройдёт ли система проверку безопасности, загрузится ли документ на 300 МБ и не оборвётся ли долгая операция. Введите адреса и получите готовый файл для nginx или HAProxy.
Включите JavaScript, чтобы увидеть файл.
Перечитывание конфигурации не обрывает открытые соединения. Если проверка нашла ошибку, работающая конфигурация не меняется.
Первые две команды должны закончиться ошибкой соединения, третья показать сертификат. Последняя печатает защитные заголовки.
Для nginx проверьте общий nginx.conf. В Debian и Ubuntu в секции http штатного файла записано ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3. Наш файл перекрывает это для своего сайта, но на остальных сайтах того же сервера старые протоколы останутся включены.
Это обратный прокси: один адрес снаружи, система внутри. Балансировка появляется только если серверов RX два.
Разрешены только TLS 1.2 и 1.3. Версии 1.0 и 1.1 сняты с поддержки браузерами в 2020 году, и их наличие считается замечанием на любой проверке безопасности. Набор шифров взят из рекомендаций Mozilla для профиля Intermediate: его понимают все браузеры за последние годы и .NET-клиенты. Билеты сессий выключены, чтобы ключи не жили дольше перезапуска.
В файле сертификата должны лежать по порядку сертификат сайта и промежуточные сертификаты удостоверяющего центра. Браузер умеет достроить цепочку сам и не покажет ошибку, а мобильное приложение, интеграции и сервисы на .NET и Java откажутся подключаться. Проверить можно командой из второго шага: в выводе должно быть больше одного сертификата.
Strict-Transport-Security запрещает браузеру ходить на сайт по HTTP целый год, поэтому включайте его, когда HTTPS уже работает надёжно. X-Content-Type-Options и X-Frame-Options закрывают подмену типа содержимого и встраивание страницы в чужой сайт. Политику содержимого (CSP) файл не задаёт: её нужно подбирать под конкретную версию веб-клиента, иначе он перестанет работать.
Веб-клиент держит постоянное соединение с сервером для уведомлений. Без заголовков Upgrade и Connection прокси превращает его в обычный запрос, и клиент каждые несколько секунд переподключается. Внешне это выглядит как запаздывающие уведомления и лишняя нагрузка.
Лимит тела запроса у nginx по умолчанию 1 МБ, и загрузка любого документа крупнее заканчивается ошибкой 413. Буферизация запроса выключена: файл передаётся в систему по мере получения, а не складывается сначала на диск прокси. Время ожидания ответа по умолчанию 60 секунд, отчёты и массовые операции идут дольше и получают 504, хотя сама операция выполняется.
Веб-клиент RX это несколько мегабайт скриптов и стилей. Со сжатием первая загрузка страницы идёт в три-четыре раза быстрее, особенно через VPN и с мобильной связи. На одном из контуров мы получили 1,5 МБ вместо 5,75 МБ одной строкой в конфигурации.
«Резерв» это привычная схема: все запросы идут на первый сервер, второй получает их, только когда первый перестал отвечать. Половина оборудования при этом простаивает. «Оба в работе» распределяет запросы по правилу наименьшего числа соединений. Для RX оно подходит лучше поочерёдной раздачи, потому что соединения уведомлений живут часами.
У схемы с двумя активными серверами два условия. Оба сервера смотрят в одну базу, один брокер и одно хранилище. Запросы уведомлений (/Centrifugo) и публикации разработки (/Client/api/deploy) должны попадать на один и тот же сервер, поэтому для них сделана привязка.
Для одного сервера RX разницы почти нет, берите то, что уже стоит. Для двух серверов HAProxy удобнее по двум причинам. Он сам опрашивает адрес проверки здоровья и выводит сервер из работы до того, как это заметят пользователи. Бесплатный nginx узнаёт об отказе только по неудавшимся запросам. И привязку HAProxy делает по cookie, а бесплатный nginx по адресу клиента: все сотрудники за одним выходом в интернет окажутся на одном сервере.
Веб-клиент RX открывается по адресу /Client, поэтому корень сайта перенаправляется туда. Адрес /Client/api/health отдаёт состояние сервиса и нужен балансировщику. Снаружи он закрыт: посторонним незачем знать, какие части системы сейчас не работают.
Чего здесь нет: ограничения частоты запросов, защиты от перебора паролей и правил сетевого экрана уровня приложений. Это настраивается под конкретную систему и её интеграции.
Отчёт rxdoctor показывает сертификат, версии TLS и заголовки пунктами с WEB-02 по WEB-05. О программе