При попытке разместить несколько информационных баз 1С, работающих на разных версиях платформы, на одном веб-сервере Apache, пользователи часто сталкиваются с проблемой. Давайте рассмотрим эту ситуацию подробнее и выясним, какие решения существуют для её преодоления. Также полезно иметь под рукой общую справку по задачам администрирования Windows, Linux и 1С.
Основная причина сложностей заключается в том, что веб-модуль 1С для Apache (например, файл wsap24.dll для Windows или wsap24.so для Linux) имеет одно и то же внутреннее имя для разных версий платформы 1С. Веб-сервер Apache, по своей архитектуре, не может одновременно загрузить несколько модулей с идентичными внутренними именами, даже если они расположены по разным файловым путям. При попытке загрузки нескольких таких модулей Apache загрузит только первый, который найдет, и будет использовать его из кеша. Это приводит к ошибкам несоответствия версий клиента и сервера 1С при попытке доступа к базам, опубликованным под другими версиями платформы.
Важно понимать: это ограничение подтверждено разработчиками Apache и не будет исправляться в обозримом будущем. Таким образом, нам необходимо искать обходные пути и альтернативные решения.
Если для нас принципиально использовать веб-сервер Apache, наиболее распространенным и эффективным обходным путем является установка и настройка нескольких его экземпляров. Каждая версия платформы 1С будет обслуживаться своим собственным, независимым экземпляром Apache.
Для каждой версии платформы 1С, которую мы планируем использовать, нам потребуется установить отдельный экземпляр Apache. Упростить этот процесс можно с помощью PowerShell-скрипта для автоматической установки нескольких экземпляров Apache. Мы устанавливаем каждый экземпляр в свою уникальную директорию на диске. Например:
C:\Apache24_8.3.10 для версии 8.3.10C:\Apache24_8.3.11 для версии 8.3.11Каждый из этих каталогов будет содержать полный набор файлов Apache, включая свой собственный конфигурационный файл httpd.conf.
httpd.conf) для каждого экземпляра:
В конфигурационном файле каждого экземпляра Apache необходимо внести следующие изменения:
Listen): Каждый экземпляр Apache должен прослушивать свой уникальный порт, чтобы избежать конфликтов. Например:
Listen 127.0.0.1:80
Listen 127.0.0.1:81
Listen 127.0.0.1:82
Мы выбираем свободные порты для каждого экземпляра.
LoadModule _1cws_module): Для каждого экземпляра Apache указываем путь к файлу веб-модуля 1С (wsap24.dll или wsap24.so), который соответствует версии платформы 1С, которую будет обслуживать именно этот экземпляр Apache.
LoadModule _1cws_module "C:/Program Files (x86)/1cv8/8.3.10.2299/bin/wsap24.dll"
LoadModule _1cws_module "C:/Program Files (x86)/1cv8/8.3.11.3034/bin/wsap24.dll"
ServerRoot): Убеждаемся, что директива ServerRoot указывает на корневую директорию соответствующего экземпляра Apache.В операционной системе Windows мы регистрируем каждый настроенный экземпляр Apache как отдельную службу. Это позволяет им работать параллельно и независимо друг от друга. Используем командную строку (от имени администратора):
"C:\Apache24_8.3.10\bin\httpd.exe" -k install -n "Apache2.4_1CV8.3.10" -f "C:\Apache24_8.3.10\conf\httpd.conf"
"C:\Apache24_8.3.11\bin\httpd.exe" -k install -n "Apache2.4_1CV8.3.11" -f "C:\Apache24_8.3.11\conf\httpd.conf"
Обратите внимание: параметр -n задает уникальное имя службы, а -f указывает путь к конкретному конфигурационному файлу для этой службы.
В Linux аналогично настраиваются отдельные systemd-службы или скрипты инициализации для каждого экземпляра Apache. При настройке служб в Linux полезно знать, как организовать "кошерный" перезапуск сервера с очисткой данных.
При публикации информационных баз 1С через Конфигуратор или консольную утилиту webinst, критически важно использовать версию утилиты, соответствующую версии платформы, и указывать правильный порт и путь к конфигурационному файлу Apache, который мы настроили для этой версии. Если мы используем утилиту webinst, ее путь также должен соответствовать версии платформы 1С (например, C:\Program Files (x86)\1cv8\8.3.10.2299\bin\webinst.exe).
Для более удобного управления многочисленными конфигурационными файлами, мы можем вынести общие настройки в один "мастер" файл, а в специфических для каждой версии файлах указывать только уникальные параметры и включать общий файл.
Пример использования переменных (по аналогии с сообщениями 12 и 14):
Создаем основной конфигурационный файл, например, conf/httpd_common.conf, где будут общие настройки. Затем, для каждой версии Apache, создаем свой небольшой конфигурационный файл, например, conf/httpd_8.3.10.conf и conf/httpd_8.3.11.conf. В этих файлах мы можем определить переменные для версии 1С:
# Пример файла conf/httpd_8.3.10.conf
Define OneCVer 10
Define OneCVerFull 8.3.10.2299
ServerRoot "C:/Apache24_8.3.10"
Listen 127.0.0.1:80
LoadModule _1cws_module "C:/Program Files/1cv8/${OneCVerFull}/bin/wsap24.dll"
Include conf/httpd_common.conf
Таким образом, мы используем переменные для указания путей и версий, что делает конфигурацию более гибкой и уменьшает количество повторяющихся настроек. Публикации веб-сервисов 1С, соответственно, будут добавляться в httpd_common.conf или в отдельные файлы, включаемые в него.
Пример, вдохновленный сообщением 13, демонстрирует, как включить общий файл:
ServerRoot "C:/Program Files (x86)/Apache Software Foundation/Apache2.4_8.3.10.2505"
Listen 127.0.0.1:81
LoadModule _1cws_module "C:/Program Files (x86)/1cv8/8.3.10.2505/bin/wsap24.dll"
Include "../conf/httpd_common.conf"
В этом случае, все общие настройки (например, директивы, касающиеся логирования, виртуальных хостов, или общих правил безопасности) будут находиться в httpd_common.conf, а уникальные для каждого экземпляра Apache параметры (ServerRoot, Listen, LoadModule) — в его индивидуальном конфигурационном файле.
Веб-сервер IIS от Microsoft является более гибким в плане работы с несколькими версиями модулей расширения, таких как модули 1С (обычно wsisapi.dll, но иногда можно использовать и wsap24.dll в режиме ISAPI). Хотя существуют и альтернативные подходы к обработке HTTP-запросов в 1С.
В IIS мы создаем отдельный пул приложений для каждой версии платформы 1С. Это позволяет изолировать процессы и библиотеки разных версий друг от друга.
Необходимо зарегистрировать все используемые версии wsisapi.dll (или wsap24.dll, если это требуется для вашего сценария) в разделе "Ограничения ISAPI" (ISAPI Restrictions) в IIS и разрешить их выполнение.
Для каждой публикации информационной базы 1С в IIS мы указываем необходимую версию веб-расширения и соответствующий ей пул приложений.
Важный аспект: в рамках одного пула приложений должны работать только расширения одной версии 1С, и разрядность библиотек (32-бит или 64-бит) должна совпадать с разрядностью пула приложений. Если нам нужно запустить 32-разрядное приложение 1С на 64-разрядном IIS, для соответствующего пула приложений потребуется включить опцию "Разрешить 32-разрядные приложения".
Следует учитывать, что повторная публикация базы средствами 1С может иногда сбрасывать некоторые ручные настройки IIS, поэтому после перепубликации может потребоваться проверка настроек.
Использование технологий виртуализации или контейнеризации является мощным решением для изоляции различных версий 1С, особенно актуальным для среды Linux, но применимым и в Windows.
Docker позволяет нам развернуть каждую версию платформы 1С в отдельном, изолированном контейнере. Каждый такой контейнер будет иметь свой собственный веб-сервер Apache (или Nginx) и соответствующую версию веб-модуля 1С, работающую на своем уникальном порту.
Преимущества:
Для того чтобы предоставить пользователям единую точку входа и скрыть сложность работы нескольких веб-серверов на разных портах, мы можем использовать обратный прокси-сервер. В качестве такого прокси-сервера может выступать Nginx или даже еще один экземпляр Apache.
Мы устанавливаем и настраиваем один "внешний" веб-сервер (Nginx или Apache), который будет прослушивать стандартные порты (например, 80 и 443). Этот сервер будет являться единственной точкой входа для всех запросов.
Обратный прокси-сервер настраивается для перенаправления (проксирования) запросов к соответствующим "внутренним" экземплярам Apache или IIS, которые мы уже настроили для разных версий 1С и которые прослушивают свои уникальные порты. Маршрутизация может осуществляться на основе различных правил:
http://localhost/SuperV10 могут перенаправляться на http://localhost:81/SuperV10 (где 81 — порт Apache для версии 8.3.10), а запросы к http://localhost/SuperV11 — на http://localhost:82/SuperV11 (порт для версии 8.3.11).http://v8310.mysite.com могут идти на один внутренний сервер, а к http://v8311.mysite.com — на другой.Пример конфигурации Nginx (фрагмент):
server {
listen 80;
server_name my1c.com;
location /v8310/ {
proxy_pass http://localhost:81/v8310/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /v8311/ {
proxy_pass http://localhost:82/v8311/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Таким образом, для пользователей все публикации выглядят так, будто они доступны на одном сервере через стандартный порт, что значительно упрощает доступ и управление ссылками.
Вне зависимости от выбранного метода, есть несколько общих рекомендаций, которые помогут нам в работе:
wsap24.dll должен быть 64-разрядным, и, соответственно, платформа 1С, под которой он работает, также должна быть 64-разрядной. Аналогично для 32-разрядных версий.webinst: Помимо публикации баз через Конфигуратор 1С, мы можем использовать консольную утилиту webinst (например, C:\Program Files (x86)\1cv8\8.3.10.2299\bin\webinst.exe). Эта утилита позволяет публиковать информационные базы без необходимости наличия клиентской лицензии 1С и может быть полезна для автоматизации или в случаях, когда Конфигуратор ведет себя непредсказуемо с настройками веб-сервера.Таким образом, хотя Apache имеет свои ограничения в работе с модулями 1С, существует несколько эффективных способов решения проблемы запуска разных версий платформы на одном сервере. Выбор конкретного подхода зависит от наших требований к инфраструктуре, опыта и предпочтений.