Публикация информационных баз «1С:Предприятия» на веб-сервере — стандартная задача для обеспечения совместной работы пользователей через веб-клиент или тонкий клиент. Часто первая публикация проходит гладко: база работает как внутри локальной сети, так и снаружи. Однако при попытке опубликовать вторую, третью или последующие базы администраторы нередко сталкиваются со следующей проблемой: веб-сервер выдает ошибку 404 (The requested URL was not found on this server) для нового адреса, хотя первая база продолжает функционировать в штатном режиме.
В этой статье мы подробно разберем, почему возникает эта ошибка, как взаимосвязаны действия в конфигураторе 1С с конфигурационными файлами веб-сервера Apache, почему служба веб-сервера может внезапно «вылетать» (падать) в процессе работы, и как настроить систему для стабильной работы множества публикаций.
Для того чтобы понять природу ошибки 404, проанализируем, что происходит «под капотом» операционной системы, когда мы нажимаем кнопку «Опубликовать» в Конфигураторе 1С под правами администратора. Платформа выполняет два ключевых действия:
C:\Apache24\htdocs\base2\) создается конфигурационный файл default.vrd. Этот XML-файл содержит описание параметров подключения к базе данных 1С (файловой или клиент-серверной), а также правила для веб-сервисов и HTTP-сервисов.httpd.conf. Она прописывает туда директивы Alias (синоним пути) и настраивает параметры доступа к созданному каталогу.Рассмотрим пример типичной записи, которую 1С добавляет в конец файла httpd.conf для каждой публикуемой базы:
# 1c publication
Alias "/base1" "C:/Apache24/htdocs/base1/"
<Directory "C:/Apache24/htdocs/base1/">
AllowOverride None
Options None
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "C:/Apache24/htdocs/base1/default.vrd"
</Directory>
Когда мы публикуем вторую базу (например, base2), в конец httpd.conf должен добавиться аналогичный блок директив, указывающий на каталог C:/Apache24/htdocs/base2/ и файл default.vrd внутри него.
Критически важный момент: веб-сервер Apache считывает конфигурационный файл httpd.conf ровно один раз — в момент своего запуска. Если мы добавили новую публикацию, Apache ничего не узнает о ней до тех пор, пока служба веб-сервера не будет успешно перезапущена. Если в процессе публикации или сразу после нее служба Apache упала, зависла или не смогла перезапуститься из-за внутренней ошибки, то при обращении по новому адресу http://IP/base2/ мы гарантированно получим ошибку 404 Not Found, так как для веб-сервера этого пути физически не существует в текущей оперативной памяти.
Падение (аварийное завершение) службы Apache при работе с несколькими базами 1С — распространенная системная проблема. Выделим основные технические причины этого поведения и разберем методы их устранения.
В операционных системах семейства Windows веб-сервер Apache по умолчанию функционирует в однопроцессном многопоточном режиме, за который отвечает модуль mpm_winnt_module. Весь трафик и все сессии пользователей обрабатываются внутри одного системного процесса httpd.exe.
Если на сервере установлена 32-разрядная (x86) версия Apache, этот рабочий процесс имеет жесткое ограничение операционной системы — он не может адресовать более 2 ГБ оперативной памяти (в некоторых конфигурациях до 3 ГБ). Активная работа пользователей в нескольких базах, построение сложных или объемных отчетов, а также фоновое выполнение регламентных заданий в опубликованных базах могут мгновенно исчерпать этот лимит. Как только потребление памяти процессом приближается к критической отметке, операционная система принудительно завершает процесс httpd.exe, и служба «вылетает».
Решение проблемы нехватки памяти:
httpd.conf, найдем блок настройки модуля mpm_winnt_module и отредактируем параметр MaxConnectionsPerChild (в старых версиях Apache он может называться MaxRequestsPerChild).По умолчанию этот параметр равен 0, что означает бесконечный цикл жизни процесса без перезапуска. Зададим ему конечное число запросов, например, 3000:
<IfModule mpm_winnt_module>
ThreadsPerChild 150
MaxConnectionsPerChild 3000
</IfModule>
После обработки 3000 запросов Apache незаметно для пользователей создаст новый чистый дочерний процесс, а старый, накопивший утечки памяти, будет корректно завершен.
Веб-сервер взаимодействует с платформой 1С через специальный модуль расширения — динамическую библиотеку wsap24.dll (для версии Apache 2.4). Эта библиотека загружается непосредственно в адресное пространство процесса Apache.
Главное правило стабильности: разрядность модуля 1С должна строго соответствовать разрядности установленного веб-сервера Apache.
LoadModule в файле httpd.conf должна указывать на библиотеку wsap24.dll из каталога 64-битной платформы 1С (например, C:/Program Files/1cv8/...).C:/Program Files (x86)/1cv8/...).Если при публикации второй базы Конфигуратор по ошибке пропишет путь к библиотеке другой разрядности, служба Apache либо сразу упадет при попытке старта, либо начнет аварийно завершаться при первом же обращении к новой публикации.
При установке новых релизов платформы «1С:Предприятие» администраторы часто выполняют повторную публикацию баз из нового конфигуратора. При этом конфигуратор автоматически меняет строку загрузки модуля 1С в файле httpd.conf на новый путь.
Разберем типичную строку загрузки модуля:
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.21.1622/bin/wsap24.dll"
Если после обновления старая папка с релизом (в примере — 8.3.21.1622) была физически удалена с диска, а в файле httpd.conf по какой-то причине остался старый путь, Apache не сможет загрузить модуль при перезапуске службы и выдаст критическую ошибку запуска.
Служба Apache в операционной системе Windows по умолчанию запускается от имени специальной системной учетной записи — SYSTEM (Локальная система) или Network Service (Сетевая служба). Для стабильной работы веб-сервера и успешного выполнения публикаций этой учетной записи необходимы следующие права:
wsap24.dll).default.vrd), а также на каталоги самих баз данных, если используются файловые версии 1С.Недостаток прав приводит к тому, что веб-сервер не может прочитать файл конфигурации публикации или записать временные файлы, что часто провоцирует сбои в работе рабочих потоков.
Если после очередной публикации базы данных вы столкнулись с ошибкой 404 или служба Apache перестала запускаться, не нужно действовать наугад. Проанализируем два простых и эффективных шага для локализации проблемы.
Любая синтаксическая ошибка в файле httpd.conf (например, опечатка в путях или неверно закрытый тег директивы) полностью блокирует запуск веб-сервера. Чтобы мгновенно найти ошибку:
bin вашего установленного веб-сервера Apache с помощью команды:
cd C:\Apache24\bin
httpd.exe -t
Утилита выполнит синтаксический анализ всех конфигурационных файлов. Если ошибок нет, система вернет сообщение Syntax OK. Если в файле есть проблема, утилита укажет точный номер строки и характер ошибки (например, невозможность загрузить конкретный модуль wsap24.dll по указанному пути).
Если синтаксис корректен, но служба падает в процессе работы под нагрузкой, обратитесь к логам ошибок. Перейдите в каталог установки Apache, откройте папку logs и проанализируйте файл error.log. В нем фиксируются все аварийные завершения процессов, нехватка памяти, проблемы инициализации библиотек 1С и некорректные запросы клиентов. Это главный источник информации для решения сложных инфраструктурных проблем.