Как настроить обратный прокси Traefik для веб-интерфейса 1С и исправить ошибки загрузки скриптов?

Системный администратор 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

Работа веб-клиента 1С:Предприятие через обратный прокси-сервер (Reverse Proxy) — это стандартная практика для обеспечения безопасности и удобства доступа. Однако часто системные администраторы сталкиваются с ситуацией, когда после успешной авторизации в браузере вместо интерфейса программы появляется сообщение «К сожалению, возникла ошибка». При этом в локальной сети всё работает безупречно.

Разберем детально, почему возникает эта проблема, проанализируем технические нюансы взаимодействия платформы 1С с прокси-сервером Traefik и найдем способ корректной настройки системы.

Анализ проблемы и поиск причин

Рассмотрим ситуацию: используется платформа 1С версии 8.3.20.1914 (хотя проблема актуальна для всей ветки 8.3), конфигурация ERP Управление холдингом, развернутая на Windows Server 2019. В качестве веб-сервера выступает Apache или IIS, а внешние запросы принимает Traefik. Проблема проявляется специфическим образом: авторизация проходит успешно, но на этапе загрузки основного интерфейса возникает критическая ошибка JavaScript в файле mod_main_loader.js.

Проанализируем технологический журнал (ТЖ) сервера 1С. В моменты возникновения ошибки часто фиксируются события:


09:59.432010-0,EXCP,2,p:processName=RegMngrCntxt,... Descr='Первичный вызов сервиса пришел в пассивный сервис.'
09:59.932041-0,EXCP,2,p:processName=RegMngrCntxt,... Descr='Сеанс отсутствует или удален ID=...'

Выясним причину такого поведения. Основная сложность заключается в том, как 1С формирует URL-запросы. Платформа активно использует символ точки с запятой (;) в качестве разделителя параметров в строке запроса (Query String). Это необходимо для передачи идентификаторов форм, контекста и сеансов. Современные прокси-серверы, включая Traefik (начиная с версии 2.0), по соображениям безопасности могут блокировать, искажать или некорректно кодировать точку с запятой, считая её подозрительным символом. В результате веб-клиент 1С не может получить необходимые данные, что приводит к краху скрипта mod_main_loader.js.

Решение 1: Настройка статической конфигурации Traefik (YAML)

Основное решение заключается в явном указании прокси-серверу Traefik на необходимость корректной обработки точек с запятой. Для этого в статической конфигурации (файл traefik.yml) в разделе описания точек входа (EntryPoints) необходимо добавить параметр encodeQuerySemicolons: true.

Рассмотрим пример правильной настройки traefik.yml:


entryPoints:
  web:
    address: ":80"
    http:
      encodeQuerySemicolons: true
      redirections:
        entryPoint:
          to: websecure
          scheme: https
  websecure:
    address: ":443"
    http:
      encodeQuerySemicolons: true

В данном примере мы активировали параметр для обоих портов (HTTP и HTTPS). Это гарантирует, что Traefik будет пропускать запросы с символом ; без их предварительного кодирования, которое «ломает» логику веб-клиента 1С.

Решение 2: Настройка через аргументы командной строки (CLI/Docker)

Если вы используете Traefik в контейнерах Docker или запускаете его через командную строку без использования файла traefik.yml, настройки можно передать в виде флагов. Это особенно удобно для облачных развертываний.

Проанализируем необходимые параметры запуска:


command:
  - --entryPoints.web.address=:80
  - --entrypoints.web.http.encodequerysemicolons=true
  - --entrypoints.web.http.redirections.entryPoint.to=websecure
  - --entrypoints.web.http.redirections.entryPoint.scheme=https
  - --entryPoints.websecure.address=:443
  - --entrypoints.websecure.http.encodequerysemicolons=true

Обратите внимание, что название параметра в CLI версии должно быть записано в нижнем регистре. После применения этих настроек и перезапуска контейнера Traefik, веб-клиент 1С начнет корректно загружать модули интерфейса.

Важность липких сессий (Sticky Sessions)

Даже после исправления ошибки с точкой с запятой, вы можете столкнуться с сообщением «Первичный вызов сервиса пришел в пассивный сервис». Разберем, почему это происходит. В кластерных решениях 1С сеанс пользователя привязан к конкретному рабочему процессу или серверу. Если Traefik перекинет очередной запрос пользователя на другой узел кластера, тот «не узнает» сеанс и выдаст ошибку.

Для решения этой проблемы в динамической конфигурации (Dynamic Configuration) необходимо включить механизм Sticky Sessions. Посмотрим на пример настройки сервиса:


http:
  services:
    1c-service:
      loadBalancer:
        sticky:
          cookie:
            name: "SRV_ID"
            httpOnly: true
            secure: true
        servers:
          - url: "http://192.168.1.10/erp_base"

Использование sticky sessions гарантирует, что все запросы в рамках одного сеанса браузера будут направляться на один и тот же внутренний сервер 1С.

Настройка HTTP-заголовков для 1С

Для того чтобы 1С правильно понимала, что она работает через прокси, и корректно строила внутренние ссылки (особенно при использовании HTTPS на внешнем контуре и HTTP внутри сети), Traefik должен передавать правильные заголовки. По умолчанию Traefik делает это автоматически, но важно убедиться, что промежуточные веб-серверы (Apache/IIS) их принимают.

Ключевые заголовки:

Если вы используете IIS, убедитесь, что установлен модуль ARR (Application Request Routing), а в настройках Apache включен mod_proxy и правильно настроен параметр ProxyPreserveHost On.

Резюме и рекомендации

Подведем итог. Ошибка «Первичный вызов сервиса пришел в пассивный сервис» и сбои в mod_main_loader.js при использовании Traefik чаще всего не связаны с ошибками в коде 1С или повреждением базы данных. Это чисто инфраструктурная проблема настройки сетевого пути.

Основные шаги для исправления:

  1. Включите encodeQuerySemicolons: true в статической конфигурации Traefik для всех используемых EntryPoints.
  2. Настройте Sticky Sessions в описании сервиса Traefik для обеспечения привязки сеанса к рабочему процессу 1С.
  3. Убедитесь, что прокси-сервер корректно пробрасывает заголовки X-Forwarded-*, а веб-сервер 1С их интерпретирует.
  4. Проверьте, что в публикации 1С (файл default.vrd) не включены специфические ограничения, которые могут конфликтовать с настройками прокси.

Соблюдение этих правил позволит обеспечить стабильную и быструю работу веб-клиента ERP и других тяжелых конфигураций 1С через современные балансировщики нагрузки и обратные прокси-серверы.

← На главную