Как разделить веб-сервисы и HTTP-сервисы 1С на разные серверы Apache или настроить SSL?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При активном развитии информационных систем на базе 1С часто возникает ситуация, когда существующие веб-сервисы (Web-services) работают по протоколу HTTP, а новые требования безопасности или специфика интеграций (например, работа с внешними API) диктуют необходимость внедрения протокола HTTPS для HTTP-сервисов. Рассмотрим, как решить задачу разделения этих потоков, сохранив стабильность работы системы.

Вариант 1. Использование виртуальных хостов (VirtualHost) в рамках одного Apache

Этот метод считается наиболее правильным с точки зрения системного администрирования. Вместо того чтобы нагружать сервер лишними запущенными процессами, мы настроим один Apache так, чтобы он "слушал" разные порты и по-разному обрабатывал входящие запросы. Проанализируем, как это реализовать.

Для начала нам необходимо подготовить файл конфигурации httpd.conf. Чтобы штатная публикация из конфигуратора 1С не затирала наши изменения, рекомендуется вынести настройки виртуальных хостов в отдельный файл, например, vhosts.conf, и подключить его в основном конфиге командой Include.

Разберем пример настройки двух хостов: один на стандартном 80 порту для внутренних веб-сервисов, другой на 443 порту с SSL для внешних HTTP-сервисов:


Listen 80
Listen 443

<VirtualHost *:80>
    DocumentRoot "C:/inetpub/wwwroot/web-services"
    ServerName internal.local
    # Настройки для обычных веб-сервисов
    ManagedModules sections...
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot "C:/inetpub/wwwroot/http-services"
    ServerName external.domain.com
    
    SSLEngine on
    SSLCertificateFile "conf/ssl/certificate.crt"
    SSLCertificateKeyFile "conf/ssl/private.key"
    
    # Настройки для HTTP-сервисов с SSL
    ManagedModules sections...
</VirtualHost>

Важным моментом является то, что для каждой публикации 1С создается свой каталог на диске, где лежит файл default.vrd. В этом файле мы можем гибко управлять доступностью конкретных сервисов. Например, в публикации на 443 порту мы оставим только HTTP-сервисы, удалив описание веб-сервисов, и наоборот.

Вариант 2. Использование Nginx как обратного прокси (Reverse Proxy)

Если Apache уже настроен и работает стабильно, и вы опасаетесь вносить изменения в его SSL-модули, рассмотрим вариант использования Nginx. В этой схеме Nginx принимает на себя зашифрованный HTTPS-трафик, расшифровывает его и передает на Apache по обычному HTTP. Это решение часто называют "терминацией SSL".

Проанализируем преимущества такого подхода: Nginx работает быстрее с SSL-соединениями и позволяет легче управлять сертификатами (например, через Let's Encrypt). Однако при работе с 1С через прокси крайне важно правильно передать заголовки, иначе 1С не сможет корректно сформировать обратные ссылки в WSDL.

Посмотрим на пример конфигурации Nginx для Windows или Linux:


server {
    listen 443 ssl;
    server_name 1c.company.ru;

    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    location / {
        proxy_pass http://localhost:80; # Перенаправляем на локальный Apache
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # Увеличиваем таймауты для тяжелых запросов 1С
        proxy_read_timeout 300;
        proxy_connect_timeout 300;
    }
}

Использование заголовка X-Forwarded-Proto критически важно, чтобы 1С понимала, что клиент на самом деле использует защищенное соединение.

Вариант 3. Запуск второго экземпляра Apache как независимой службы

Если требуется полная изоляция ресурсов (например, если падение одного сервиса не должно влиять на другой), можно запустить второй экземпляр Apache. Выясним, как сделать это корректно, чтобы избежать конфликтов.

  1. Скопируйте папку с установленным Apache в новое место (например, C:\Apache24_SSL).
  2. В новом файле httpd.conf измените параметр Listen на другой порт (например, 8443 или 443) и укажите уникальные пути для ErrorLog и CustomLog.
  3. Зарегистрируйте новую службу Windows с уникальным именем через командную строку: httpd.exe -k install -n "Apache-SSL-1C"
  4. Выполните публикацию базы через конфигуратор, указав путь к новому конфигурационному файлу Apache.

Важный нюанс: при работе двух экземпляров Apache потребление оперативной памяти сервером удвоится, так как каждый процесс будет загружать модули расширения 1С (wsap24.dll) и порождать свои рабочие потоки.

Тонкости настройки файла default.vrd

Независимо от выбранного способа, финальная логика разделения сервисов лежит в файле default.vrd. Разберем, как ограничить доступ к объектам метаданных. В секции httpServices и ws можно явно указывать, какие сервисы публикуются:


<httpServices publishByDefault="false">
    <service name="ИмяВашегоСервиса" alias="v1" enable="true"/>
</httpServices>

Параметр publishByDefault="false" позволяет закрыть все сервисы, кроме тех, что явно перечислены с флагом enable="true". Это обеспечит дополнительный уровень безопасности при выводе HTTP-сервисов во внешнюю сеть.

Подведем итог: для минимальных трудозатрат и экономии ресурсов рекомендуется использовать VirtualHost внутри одного Apache. Если же вам нужна максимальная гибкость и удобство работы с современными сертификатами — выбирайте связку Nginx + Apache.

← На главную