При работе веб-клиента 1С:Предприятия через веб-сервер Apache на операционной системе Ubuntu могут возникать различные трудности. Одной из распространённых проблем является невозможность загрузки веб-клиента, сопровождающаяся специфическими ошибками в логах Apache, такими как AH00052: child pid XXXX exit signal Aborted (6). Также в консоли разработчика браузера может появиться необычная ошибка 402 (Payment required). В самых необычных случаях веб-клиент может начать работать только при открытом конфигураторе на сервере.
В этом руководстве мы подробно рассмотрим причины возникновения этих ошибок и поэтапно разберем, как их диагностировать и устранить, основываясь на опыте решения подобных проблем.
Давайте проанализируем основные симптомы, с которыми мы можем столкнуться:
AH00052: child pid XXXX exit signal Aborted (6) в логах Apache: Это указывает на то, что дочерний процесс Apache был принудительно завершен (aborted) сигналом 6 (SIGABRT). В контексте работы с 1С и веб-серверами это часто связано с проблемами в модуле расширения веб-сервера 1С. Причины могут быть различными: от нехватки ресурсов до некорректной работы самого модуля или конфликтов с другими модулями Apache.402 (Payment required): Эта ошибка не является стандартной для проблем с доступом к веб-серверу или лицензированию в прямом смысле. Изначально HTTP-стандарт резервирует ее для будущих целей, связанных с системами оплаты. Если такую ошибку выдает сервер 1С, это может указывать на ошибку в коде конфигурации 1С, некорректную обработку исключений внутри платформы или проблемы с внешней интеграцией.Первым шагом всегда является детальный анализ логов 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 непосредственно с машины, где опубликована база. Если ситуация остается такой же, это дополнительно сужает круг поиска, исключая проблемы с сетевой доступностью с других машин.
Эта ошибка, появляющаяся в консоли хрома, является крайне нетипичной для проблем с веб-сервером или лицензированием. Если 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.
Возможные причины феномена "открытого конфигуратора" включают:
www-data на Ubuntu).rphost может требовать значительных объемов оперативной памяти, особенно при старте. Если выделенный лимит памяти для процессов Apache или 1С недостаточен, это может привести к аварийному завершению.Мы должны убедиться, что пользователь, от имени которого запущен Apache (например, www-data), имеет достаточные права на доступ к файлам платформы 1С, конфигурационным файлам, временным каталогам и каталогам баз данных.
Одной из наиболее частых причин проблем при интеграции 1С с Apache, особенно на Linux, является неправильно выбранный модуль мультипроцессной обработки (MPM). Давайте определим, какой MPM используется Apache:
apachectl -V | grep -i mpm
В нашем случае мы увидели: Server MPM: prefork.
Рассмотрим подробнее типы MPM:
mpm_prefork: Этот модуль создает несколько дочерних процессов, каждый из которых может обрабатывать один запрос. Он хорошо подходит для модулей, не поддерживающих многопоточность, но менее эффективен с точки зрения использования памяти по сравнению с другими MPM.mpm_worker: Использует гибридный подход: несколько процессов, каждый из которых запускает несколько потоков. Это обеспечивает лучшую производительность и использование ресурсов для многопоточных приложений.mpm_event: Основан на mpm_worker, но оптимизирован для обработки большого количества одновременных соединений, не блокируя потоки на ожидании ответа от клиента.Важно: 1С:Предприятие часто рекомендуется использовать с mpm_worker или mpm_event для более эффективной и стабильной работы веб-сервера, особенно при значительном количестве пользователей. Модуль расширения веб-сервера 1С является многопоточным, и prefork может вызывать конфликты или неэффективное использование ресурсов, приводя к аварийным завершениям.
Когда мы работаем с mpm_prefork, а модуль 1С ожидает многопоточную среду, это может приводить к аварийным завершениям. Кроме того, некоторые модули Apache, предназначенные для запуска CGI/FastCGI скриптов от имени различных пользователей, могут конфликтовать с модулем расширения веб-сервера 1С. К таким модулям относятся suExec, fcgi и ruid2.
Наличие этих модулей может создавать неправильные условия для работы модуля 1С, который ожидает работать в определенной среде и от имени определенного пользователя (обычно пользователя Apache).
Ключевым шагом в решении проблемы является правильная настройка модулей Apache:
mpm_event: Мы должны отключить mpm_prefork и активировать mpm_event (или mpm_worker, если event не доступен или вызывает другие проблемы).mpm_prefork, его также следует отключить перед переключением MPM. Это связано с тем, что PHP обычно также имеет свои модули, привязанные к конкретному MPM.suExec, fcgi и ruid2, если они включены и не требуются для других веб-приложений на этом же сервере.Выполним следующие команды в терминале Ubuntu:
mpm_prefork и php7.2 (если включен):
a2dismod mpm_prefork
a2dismod php7.2
Команда a2dismod отключает указанный модуль Apache.
mpm_event:
a2enmod mpm_event
Команда a2enmod включает указанный модуль Apache. Если вы столкнетесь с проблемами, можете попробовать mpm_worker, если event не сработает.
Убедитесь, что модули suExec, fcgi и ruid2 отключены. Если они были включены, отключите их:
a2dismod suexec
a2dismod fcgi
a2dismod ruid2
Примечание: Если у вас эти модули не были включены, команды a2dismod просто не найдут их и выведут соответствующее сообщение, что не является ошибкой.
systemctl restart apache2
После перезапуска Apache попробуем снова запустить веб-клиент. Мы ожидаем, что ошибки AH00052 должны исчезнуть, а веб-клиент должен загрузиться без проблем.
После применения основного решения, мы должны дополнительно проверить и убедиться в стабильности системы:
www-data на Ubuntu), имеет необходимые права на чтение и выполнение в каталоге установки платформы 1С и в каталоге, где хранятся данные кластера серверов 1С (например, /home/usr1cv8/.1cv83/).Применив описанные шаги, мы успешно решаем проблему с недоступностью веб-клиента 1С, устраняя конфликты модулей Apache и настраивая оптимальный режим его работы для взаимодействия с платформой 1С:Предприятие.