Для тех, кто еще не слышал об Open Server Panel (далее OSP) - это программная среда для веб-разработки на Windows с почти 4-мя миллионами скачиваний, позволяет быстро развернуть рабочую среду без дополнительной настройки. К тому же имеет удобный и понятный интерфейс.
Предположим, что вы ранее успешно публиковали 1С, уже установили программу, ознакомились с технологией и, может, даже создали пару виртуальных доменов.
Обычно при публикации 1С не утруждает нас конфигурированием Apache, сейчас же придется вникнуть в некоторые особенности настройки.
Начнем с того, что каждая публикация имеет файл *.vrd, в котором описаны настройки публикации, то есть что и как должно использоваться при обработке запроса модулем веб сервиса 1С. В нем найдем строку вида base="/myApp", где "myApp" внешнее имя базы с точки зрения 1С. Структурно все конфигурации и шаблоны OSP находятся в директории /modules, так что не будем отходить от этой идеи и создадим папку "1с", в ней папку нашего проекта "myApp" и уже туда положим файл описания публикации default.vrd, так чтобы полный путь выглядел как "C:\OSPanel\modules\1c\myApp\default.vrd". Рекомендую рядом скопировать этот файл, на случай если основной затрется или настройки публикации изменятся.
Так же в директории "domains" создадим папку "myApp", туда можно будет положить файлы веб сайта, для примера вот этот:
Теперь перейдем к конфигурации Apache.
Запускаем OSP, в трее ПКМ по иконке - Дополнительно - Конфигурация - Apache...
В начале файла, в блоке "General" добавим строку Listen %ip%:1503
Перейдем к секции подгружаемых модулей (Modules):
Раскомментируем модули proxy_module и proxy_http_module
Тут же вставляем LoadModule _1cws_module "C:/Program Files/1cv8/8.3.21.1393/bin/wsap24.dll" (см. картинку ниже, строка 157)
При автоматической публикации через конфигуратор, 1с сама подставляет эту строку, мы же пропишем вручную.
Важно запомнить, что при обновлении платформы необходимо в этой строке указать номер новой версии.
Следующий этап - сделать так, чтобы apache понял, как, откуда и куда перенаправлять запросы.
Так как 1С считает, что наши публикации могут быть отделены друг от друга только корневым путем входящего URL, пропишем хитрый маневр.
Вставим следующий текст в самый конец файла
# ----------------------------
# 1c publication
# ----------------------------
<VirtualHost *:1503>
ServerName 1c.publications
Alias /myApp "%sprogdir%/modules/1c/myApp/"
<Directory "%sprogdir%/modules/1c/myApp">
AllowOverride All
Options None
Order allow,deny
Allow from all
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor %sprogdir%/modules/1c/myApp/default.vrd
</Directory>
</VirtualHost>
<VirtualHost *:%httpport%>
ServerName mySite.test
DocumentRoot "%sprogdir%/domains/myApp"
</VirtualHost>
<VirtualHost *:%httpport%>
ServerName api.mySite.test
RewriteEngine On
ProxyPreserveHost On
ProxyPass / http://1c.publications:1503/myApp/hs/myHTTPservice/
ProxyPassReverse / http://1c.publications:1503/myApp/hs/myHTTPservice/
</VirtualHost>
Что тут происходит:
Первый блок - создаем виртуальный хост "1c.publications" на стороннем порту 1503, через него мы будем проксировать входящие запросы. Тут таких пар Alias и Directory может быть сколько угодно, по одной для каждой публикации.
Второй блок - публикация домена "mySite.test", через него мы сможем обращаться к файлам директории \domains\myApp, в частности к файлу index.html, который мы создали 2-мя пунктами ранее.
Третий блок - публикация поддомена "api", единственное, что мы тут делаем, так это перенаправляем весь запрос сразу в нужную публикацию 1с и нужный HTTP-сервис.
Сохраняем файл и переходим к последнему этапу.
В трее ПКМ по иконке OSP - Дополнительно - Конфигурация - Hosts файл
Обычно также находится тут: C:\Windows\System32\drivers\etc\hosts
В самый конец файла вставляем:
127.0.0.1 1c.publications
127.0.0.1 api.mySite.test
127.0.0.1 mySite.test
Сохраняемся и перезагружаем OSP.
Теперь мы можем отправить запрос /ping двумя способами:
1. http://1c.publications:1503/myApp/hs/myHTTPservice/ping
2. http://api.mySite.test/ping
А сам веб сайт находится тут - http://mySite.test/
Замечу, что ничего связанного с этими публикациями в настройках доменов и алиасов OSP не должно быть.
Это же решение может быть использована вне OSP, с голым апачем и для публикации сервиса в открытый доступ.
Пару штрихов и никто не узнает, что у вашего приложения на бэке 1с))
Надеюсь, кому-то эта статья окажется полезной. Сеньоров девопсов прошу в комментарии, может, у кого найдется более элегантное решение)