При развертывании веб-сервисов 1С на сервере Apache 2.2 системные администраторы часто сталкиваются с ситуацией, когда автоматическая публикация базы «перехватывает» все запросы к серверу. В результате вместо привычной главной страницы сайта (index.html) при вводе IP-адреса или доменного имени сразу открывается веб-клиент 1С. Это происходит из-за некорректного распределения директив в конфигурационном файле httpd.conf. Разберем подробно, как правильно настроить виртуальные хосты (Virtual Hosts), чтобы разделить статический контент и информационные базы 1С.
Основная причина, по которой 1С открывается вместо основного сайта, заключается в глобальном объявлении обработчика SetHandler 1c-application. Когда вы выполняете публикацию через конфигуратор 1С или утилиту webinst, настройки часто записываются вне секций виртуальных хостов. В Apache 2.2 глобальные настройки имеют приоритет над всеми остальными запросами, если они не изолированы внутри конкретных контейнеров. Рассмотрим ситуацию: если директива Alias и настройки Directory с обработчиком 1С находятся в корневом конфигурационном файле, сервер будет пытаться применить их к любому входящему запросу, соответствующему шаблону пути.
Выясним причину ошибки в конфигурации, которую часто допускают новички. Если в httpd.conf прописано:
Alias "/app" "C:/Program Files/Apache2.2/htdocs/app/"
<Directory "C:/Program Files/Apache2.2/htdocs/app/">
SetHandler 1c-application
...
</Directory>
То сервер будет считать этот путь приоритетным. А если при этом не настроены виртуальные хосты на основе имен, Apache просто отдаст первую найденную конфигурацию, которая кажется ему подходящей.
Прежде всего, нам необходимо убедиться, что модуль расширения 1С загружен глобально, но не активен для всего сервера сразу. Найдите в httpd.conf строку загрузки модуля (она обычно добавляется автоматически при публикации базы) и оставьте ее на верхнем уровне конфигурации:
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.X.X/bin/wsap22.dll"
Затем, что критически важно для версии Apache 2.2, мы должны явно разрешить использование виртуальных хостов на основе имен. Для этого используем директиву NameVirtualHost. Проанализируем ее синтаксис: она должна точно соответствовать тому, что будет указано в заголовках блоков VirtualHost.
Добавим в конфигурацию:
NameVirtualHost *:80
В Apache существует правило: первый объявленный виртуальный хост является «дефолтным». Если запрос приходит на IP-адрес или по домену, который не описан в последующих секциях, сервер отдаст контент именно из первого блока. Поэтому первым мы настроим основной домен для статической страницы. Рассмотрим пример:
<VirtualHost *:80>
ServerName 1ctest.ru
ServerAlias www.1ctest.ru
DocumentRoot "C:/Apache2.2/htdocs/main"
DirectoryIndex index.html
<Directory "C:/Apache2.2/htdocs/main">
Order allow,deny
Allow from all
AllowOverride None
</Directory>
</VirtualHost>
Обратим внимание на важный нюанс: в директиве ServerName нельзя указывать протокол http://. Указывается только доменное имя. Если вы укажете протокол, Apache 2.2 может некорректно сопоставлять входящие HTTP-заголовки Host, и перенаправление не сработает.
Теперь создадим отдельный блок для поддомена (например, app.1ctest.ru), где и будет располагаться наша публикация 1С. Главный секрет успеха здесь — перенос всех настроек 1С (Alias и Directory) внутрь этого блока. Посмотрим на правильную структуру:
<VirtualHost *:80>
ServerName app.1ctest.ru
DocumentRoot "C:/Apache2.2/htdocs/app"
Alias "/app" "C:/Apache2.2/htdocs/app/"
<Directory "C:/Apache2.2/htdocs/app/">
AllowOverride All
Options None
Order allow,deny
Allow from all
SetHandler 1c-application
ManagedApplicationDescriptor "C:/Apache2.2/htdocs/app/default.vrd"
</Directory>
</VirtualHost>
В этой конфигурации SetHandler 1c-application будет срабатывать только тогда, когда пользователь обращается по адресу app.1ctest.ru/app. При обращении к корню основного домена обработчик 1С вызываться не будет.
Разберем типичные ошибки с путями. В Apache 2.2 рекомендуется избегать лишних завершающих слешей в DocumentRoot, однако в Directory и Alias они должны быть согласованы. Также крайне важно убедиться, что для новых каталогов прописаны разрешения Allow from all, иначе вы получите ошибку 403 Forbidden.
Проанализируем параметры доступа:
Order allow,deny — определяет порядок обработки правил (сначала разрешающие, потом запрещающие).Allow from all — разрешает доступ всем пользователям. Это стандарт для публичных веб-ресурсов.DirectoryIndex index.html — указывает серверу, какой файл открывать при обращении к папке.После внесения изменений обязательно нужно проверить синтаксис конфигурационного файла. Это можно сделать с помощью команды httpd -t в командной строке. Если система выдаст Syntax OK, можно перезапускать службу Apache.
Посмотрим на финальный результат. Теперь при вводе в браузере 1ctest.ru сервер сопоставит запрос с первым виртуальным хостом и отобразит index.html. При обращении к app.1ctest.ru/app сервер активирует модуль 1С, прочитает файл default.vrd и запустит веб-клиент. Таким образом, мы добились четкого разделения ресурсов на одном физическом сервере и одном IP-адресе, используя стандартные механизмы веб-сервера Apache 2.2.