Почему веб-клиент 1С:Предприятия не загружается с ошибкой AH00052 и 402 Payment Required при работе через Apache на Ubuntu?

Системный администратор 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При работе веб-клиента 1С:Предприятия через веб-сервер Apache на операционной системе Ubuntu могут возникать различные трудности. Одной из распространённых проблем является невозможность загрузки веб-клиента, сопровождающаяся специфическими ошибками в логах Apache, такими как AH00052: child pid XXXX exit signal Aborted (6). Также в консоли разработчика браузера может появиться необычная ошибка 402 (Payment required). В самых необычных случаях веб-клиент может начать работать только при открытом конфигураторе на сервере.

В этом руководстве мы подробно рассмотрим причины возникновения этих ошибок и поэтапно разберем, как их диагностировать и устранить, основываясь на опыте решения подобных проблем.

Введение: Понимание проблемы

Давайте проанализируем основные симптомы, с которыми мы можем столкнуться:

  1. Ошибки AH00052: child pid XXXX exit signal Aborted (6) в логах Apache: Это указывает на то, что дочерний процесс Apache был принудительно завершен (aborted) сигналом 6 (SIGABRT). В контексте работы с 1С и веб-серверами это часто связано с проблемами в модуле расширения веб-сервера 1С. Причины могут быть различными: от нехватки ресурсов до некорректной работы самого модуля или конфликтов с другими модулями Apache.
  2. HTTP ошибка 402 (Payment required): Эта ошибка не является стандартной для проблем с доступом к веб-серверу или лицензированию в прямом смысле. Изначально HTTP-стандарт резервирует ее для будущих целей, связанных с системами оплаты. Если такую ошибку выдает сервер 1С, это может указывать на ошибку в коде конфигурации 1С, некорректную обработку исключений внутри платформы или проблемы с внешней интеграцией.
  3. Веб-клиент и тонкий клиент по HTTP не запускаются, но тонкий клиент через кластер работает: Это важный диагностический признак. Если прямое подключение к кластеру серверов 1С работает, а подключение через HTTP — нет, это однозначно указывает на проблему с веб-сервером (Apache и модулем 1С), а не с самой базой данных или кластером 1С.
  4. Зависимость работы от открытого конфигуратора: Это крайне необычное поведение. Если веб-клиент и тонкий клиент по HTTP начинают работать только при открытом конфигураторе на сервере, это может указывать на то, что конфигуратор запускается от имени пользователя с полными правами, который корректно инициализирует какие-либо компоненты 1С, необходимые для работы веб-сервера. Когда конфигуратор закрывается, эти компоненты могут перестать быть доступными для пользователя Apache. Либо же происходит ошибка инициализации системных или служебных процессов 1С, которые не запускаются или некорректно работают как сервисы.

Этап 1: Начальная диагностика и исключение возможных причин

Проверка логов Apache

Первым шагом всегда является детальный анализ логов Apache. Именно здесь мы находим сообщения типа AH00052: child pid XXXX exit signal Aborted (6). Эти сообщения говорят о том, что один из дочерних процессов Apache аварийно завершился. Для начала убедимся, что конфигурация Apache синтаксически верна:


apachectl -t

Мы должны увидеть вывод Syntax OK. Если есть синтаксические ошибки, их необходимо устранить.

Анализ типа лицензии и её доступности

Несмотря на то, что проблемы с лицензированием часто подозреваются в первую очередь, в нашем случае, если тонкий клиент подключается через кластер, а веб-клиент — нет, вероятность проблемы именно с лицензией снижается. Однако мы должны убедиться, что лицензия корректно выдается. Например, используется «Бухгалтерия предприятия, версия Проф» с одной программной лицензией на сервере.

Мы проверили: Текущая: 8016*****, клиент 1/1, 23.11.2021 18:35:07, **********************, выдал сервер. Это показывает, что лицензия выдана сервером и используется одним клиентом из одного доступного, что нормально. Однопользовательская лицензия без проблем может быть выдана модулем веб-сервера при подключении веб-клиентом, при условии, что она свободна.

Если возникнут подозрения, можно временно запретить выдачу лицензий сервером или попробовать подключиться тонким клиентом с локально установленной однопользовательской лицензией. Если в этом случае клиент заработает, а при выдаче лицензии сервером — нет, тогда проблема может быть в механизме выдачи серверных лицензий. Однако в нашем случае тонкий клиент с лицензией на сервере подключается через кластер, что исключает проблему с самой лицензией.

Проверка подключения тонкого клиента

Как мы уже выяснили, тонкий клиент через HTTP не подключается, выдавая те же ошибки Apache, но через кластер (прямое подключение к серверу 1С) подключается успешно. Это подтверждает, что проблема не в самой базе данных и не в кластере серверов 1С, а именно в связке Apache + модуль расширения веб-сервера 1С.

Давайте попробуем подключиться к веб-серверу по HTTP непосредственно с машины, где опубликована база. Если ситуация остается такой же, это дополнительно сужает круг поиска, исключая проблемы с сетевой доступностью с других машин.

HTTP ошибка 402 (Payment Required)

Эта ошибка, появляющаяся в консоли хрома, является крайне нетипичной для проблем с веб-сервером или лицензированием. Если отдает этот код, это может быть следствием:

  1. Ошибки в конфигурации: Возможно, в коде конфигурации 1С есть логика, которая при определенных условиях формирует такой HTTP-ответ.
  2. Некорректной обработки исключений: Сервер 1С или веб-модуль может некорректно обрабатывать внутренние ошибки, приводящие к выдаче такого неожиданного кода.

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

Феномен "открытого конфигуратора"

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

Мы проверили статус агента сервера 1С:Предприятия:


service srv1cv83 info

Мы получили информацию о запущенных компонентах:


1C:Enterprise 8.3 server info:
Data dir: /home/usr1cv8/.1cv83/1C/1Cv83
Main port: 1540
RegPort: 1541
Port range: 1560:1591
Debug mode: 0
Sec. level: 0
Ping period: 1000
Ping timeout: 5000

Также мы просмотрели запущенные процессы 1С:


ps aux | grep usr1cv8

И увидели, что процессы ragent, rmngr, rphost запущены. Это означает, что сам кластер серверов 1С работает, но что-то происходит при взаимодействии с Apache.

Возможные причины феномена "открытого конфигуратора" включают:

  1. Различные пользователи/среды: Конфигуратор может запускаться от имени пользователя с полными правами (например, текущего пользователя системы), который корректно инициализирует какие-либо компоненты 1С, необходимые для работы веб-сервера. Когда конфигуратор закрывается, эти компоненты могут перестать быть доступными для пользователя Apache (часто это www-data на Ubuntu).
  2. Проблемы с библиотеками или переменными окружения: Конфигуратор может устанавливать определенные переменные окружения или использовать библиотеки, которые недоступны процессу Apache при его самостоятельном запуске.
  3. Нехватка памяти: Несмотря на то, что на сервере может быть "много памяти", модуль веб-сервера 1С или процесс rphost может требовать значительных объемов оперативной памяти, особенно при старте. Если выделенный лимит памяти для процессов Apache или 1С недостаточен, это может привести к аварийному завершению.

Мы должны убедиться, что пользователь, от имени которого запущен Apache (например, www-data), имеет достаточные права на доступ к файлам платформы 1С, конфигурационным файлам, временным каталогам и каталогам баз данных.

Этап 2: Ключевая диагностика: Модули MPM Apache и конфликтующие модули

Определение текущего MPM

Одной из наиболее частых причин проблем при интеграции 1С с Apache, особенно на Linux, является неправильно выбранный модуль мультипроцессной обработки (MPM). Давайте определим, какой MPM используется Apache:


apachectl -V | grep -i mpm

В нашем случае мы увидели: Server MPM: prefork.

Рассмотрим подробнее типы MPM:

  1. mpm_prefork: Этот модуль создает несколько дочерних процессов, каждый из которых может обрабатывать один запрос. Он хорошо подходит для модулей, не поддерживающих многопоточность, но менее эффективен с точки зрения использования памяти по сравнению с другими MPM.
  2. mpm_worker: Использует гибридный подход: несколько процессов, каждый из которых запускает несколько потоков. Это обеспечивает лучшую производительность и использование ресурсов для многопоточных приложений.
  3. mpm_event: Основан на mpm_worker, но оптимизирован для обработки большого количества одновременных соединений, не блокируя потоки на ожидании ответа от клиента.

Важно: 1С:Предприятие часто рекомендуется использовать с mpm_worker или mpm_event для более эффективной и стабильной работы веб-сервера, особенно при значительном количестве пользователей. Модуль расширения веб-сервера 1С является многопоточным, и prefork может вызывать конфликты или неэффективное использование ресурсов, приводя к аварийным завершениям.

Проблема с `prefork` и конфликтными модулями

Когда мы работаем с mpm_prefork, а модуль 1С ожидает многопоточную среду, это может приводить к аварийным завершениям. Кроме того, некоторые модули Apache, предназначенные для запуска CGI/FastCGI скриптов от имени различных пользователей, могут конфликтовать с модулем расширения веб-сервера 1С. К таким модулям относятся suExec, fcgi и ruid2.

Наличие этих модулей может создавать неправильные условия для работы модуля 1С, который ожидает работать в определенной среде и от имени определенного пользователя (обычно пользователя Apache).

Этап 3: Решение проблемы: Изменение настроек Apache

Ключевым шагом в решении проблемы является правильная настройка модулей Apache:

  1. Переключение MPM на mpm_event: Мы должны отключить mpm_prefork и активировать mpm_event (или mpm_worker, если event не доступен или вызывает другие проблемы).
  2. Отключение PHP: Если PHP используется с mpm_prefork, его также следует отключить перед переключением MPM. Это связано с тем, что PHP обычно также имеет свои модули, привязанные к конкретному MPM.
  3. Отключение конфликтующих модулей: Мы должны отключить модули suExec, fcgi и ruid2, если они включены и не требуются для других веб-приложений на этом же сервере.

Пошаговая инструкция по переключению MPM на `event` и отключению конфликтующих модулей

Выполним следующие команды в терминале Ubuntu:

  1. Отключим mpm_prefork и php7.2 (если включен):
  2. 
    a2dismod mpm_prefork
    a2dismod php7.2
    

    Команда a2dismod отключает указанный модуль Apache.

  3. Включим mpm_event:
  4. 
    a2enmod mpm_event
    

    Команда a2enmod включает указанный модуль Apache. Если вы столкнетесь с проблемами, можете попробовать mpm_worker, если event не сработает.

  5. Отключим конфликтующие модули:
  6. Убедитесь, что модули suExec, fcgi и ruid2 отключены. Если они были включены, отключите их:

    
    a2dismod suexec
    a2dismod fcgi
    a2dismod ruid2
    

    Примечание: Если у вас эти модули не были включены, команды a2dismod просто не найдут их и выведут соответствующее сообщение, что не является ошибкой.

  7. Перезапустим Apache:
  8. 
    systemctl restart apache2
    

    После перезапуска Apache попробуем снова запустить веб-клиент. Мы ожидаем, что ошибки AH00052 должны исчезнуть, а веб-клиент должен загрузиться без проблем.

    Дополнительные рекомендации и проверка

    После применения основного решения, мы должны дополнительно проверить и убедиться в стабильности системы:

    1. Анализ технологического журнала 1С:Предприятие: Помимо логов Apache, крайне важно анализировать технологический журнал 1С:Предприятие. Он может содержать более детальную информацию о внутренних ошибках платформы, ошибках лицензирования, нехватке памяти или проблемах с доступом к базе данных, которые приводят к сбоям веб-сервера.
    2. Проверка прав доступа: Убедитесь, что пользователь, от имени которого запущен Apache (например, www-data на Ubuntu), имеет необходимые права на чтение и выполнение в каталоге установки платформы 1С и в каталоге, где хранятся данные кластера серверов 1С (например, /home/usr1cv8/.1cv83/).
    3. Настройка фаервола и SELinux/AppArmor: Проверьте, что фаервол (например, UFW на Ubuntu) не блокирует порты, необходимые для работы Apache (80/443), сервера 1С (1540-1591 по умолчанию) и PostgreSQL (5432). На системах Linux также проверьте настройки безопасности (SELinux или AppArmor), которые могут ограничивать действия процессов Apache или 1С.
    4. Совместимость версий платформы 1С и Apache: Всегда убеждайтесь, что версии платформы 1С:Предприятие и Apache совместимы согласно документации 1С. Несоответствие версий или даже компонентов операционной системы (например, библиотек C++) может вызывать сбои.

    Применив описанные шаги, мы успешно решаем проблему с недоступностью веб-клиента 1С, устраняя конфликты модулей Apache и настраивая оптимальный режим его работы для взаимодействия с платформой 1С:Предприятие.