Как настроить автоматический редирект с HTTP на HTTPS для опубликованной базы 1С на веб-сервере Apache?

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

При публикации информационных баз 1С на веб-сервере крайне важно обеспечить безопасность передаваемых данных. Использование защищенного протокола HTTPS защищает учетные данные пользователей и конфиденциальную информацию компании от перехвата. Однако пользователи часто по привычке вводят простой адрес вида http://Server/Baza. В этой ситуации перед администратором встает задача: настроить автоматическое перенаправление (редирект) всех входящих HTTP-запросов на безопасное HTTPS-соединение.

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

Почему редирект через .htaccess для баз 1С часто не работает?

Многие системные администраторы пытаются настроить редирект привычным способом — созданием или редактированием файла .htaccess в каталоге публикации базы 1С, добавляя туда стандартные директивы модуля mod_rewrite. Однако при работе с платформой 1С этот метод часто дает сбои или полностью игнорируется сервером. Выясним основные причины этой проблемы:

  1. Приоритет wsap-модуля 1С: При публикации информационной базы в конфигурационный файл Apache добавляются директивы, подключающие специальный модуль платформы 1С (например, wsap24.dll для Windows или mod_wsap24.so для Linux). Этот модуль перехватывает все запросы к виртуальному каталогу базы на очень ранней стадии обработки запроса сервером Apache. Если правила редиректа описаны на уровне каталога (в файле .htaccess), Apache часто просто не успевает применить их до того, как управление будет передано модулю 1С.
  2. Настройки директивы AllowOverride: Во многих стандартных дистрибутивах Apache в целях безопасности обработка файлов .htaccess по умолчанию отключена. Для системных каталогов директива AllowOverride установлена в значение None. Чтобы сервер начал читать конфигурационные файлы из папок публикации, в основном файле httpd.conf необходимо вручную переопределить эту директиву на AllowOverride All.
  3. Риск перезаписи при публикации: Файлы в каталоге публикации базы 1С (включая .htaccess и файл параметров публикации default.vrd) могут быть полностью перезаписаны или сброшены в исходное состояние при любой повторной публикации базы из конфигуратора 1С или при обновлении платформы с помощью утилиты webinst.

Именно поэтому наиболее надежным, отказоустойчивым и профессиональным решением является настройка редиректа на уровне глобальной конфигурации веб-сервера Apache, а именно в файлах httpd.conf или httpd-vhost.conf.

Вариант 1: Настройка редиректа через mod_rewrite в httpd-vhost.conf (Решение проблемы)

Рассмотрим практическое решение, к которому пришли участники обсуждения. Для реализации перенаправления нам потребуется отредактировать конфигурационный файл виртуальных хостов Apache. Как правило, он располагается по пути conf/extra/httpd-vhost.conf относительно корневой директории установки Apache.

Проанализируем конфигурацию и разберем по шагам процесс ее настройки:

Шаг 1. Откроем файл httpd-vhost.conf в текстовом редакторе с правами администратора.

Шаг 2. Найдем конфигурацию виртуального хоста, который отвечает за обработку запросов по стандартному незащищенному порту 80 (обычно он обозначен как <VirtualHost _default_:80> или <VirtualHost *:80>).

Шаг 3. Добавим внутрь этого блока правила перенаправления с использованием модуля mod_rewrite:


<VirtualHost _default_:80>
    DocumentRoot "${SRVROOT}/htdocs"
    ServerName yourserver.domain.local
    
    RewriteEngine on
    RewriteCond %{HTTPS} =off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</VirtualHost>

Разберем подробнее, как работают эти директивы:

Шаг 4. Обязательно убедимся, что в главном конфигурационном файле httpd.conf раскомментирована строка подключения модуля перезаписи:

LoadModule rewrite_module modules/mod_rewrite.so

Шаг 5. Перезапустим службу веб-сервера Apache для применения внесенных изменений.

Вариант 2: Более производительный редирект с помощью mod_alias (Рекомендация Apache)

Несмотря на то, что использование модуля mod_rewrite полностью решает проблему, официальная документация Apache рекомендует избегать его применения в тех случаях, когда требуется простое глобальное перенаправление. Использование регулярных выражений в mod_rewrite создает дополнительную нагрузку на процессор веб-сервера.

Для оптимизации производительности разберем альтернативный и более элегантный способ перенаправления с использованием стандартного модуля mod_alias. Данный модуль практически всегда активен в Apache по умолчанию.

Посмотрим на пример конфигурации виртуального хоста на 80-м порту с использованием директивы Redirect:


<VirtualHost *:80>
    ServerName yourserver.domain.local
    Redirect permanent / https://yourserver.domain.local/
</VirtualHost>

В данном случае директива Redirect permanent / сообщает веб-серверу, что абсолютно любой запрос, пришедший на корень (/) незащищенного сайта, должен быть мгновенно перенаправлен на соответствующий защищенный адрес с сохранением всего остального пути. Это решение работает быстрее, проще читается и исключает вероятность ошибок при разборе сложных регулярных выражений.

Влияние редиректов на Web-сервисы и HTTP-сервисы 1С

Если ваша опубликованная база 1С используется не только живыми пользователями через веб-клиент в браузере, но и для интеграции с внешними системами (например, обмен данными с сайтом, мобильными приложениями, обработка SOAP или REST API запросов), стандартный редирект 301 может нарушить работу обменов.

Выясним причину этой проблемы. Большинство простых HTTP-клиентов и старых библиотек интеграции при получении ответа с кодом 301 Moved Permanently или 302 Found на запрос типа POST (который обычно содержит тело запроса с XML или JSON данными) автоматически преобразуют повторный запрос на HTTPS в метод GET. При этом тело запроса полностью теряется, и база 1С возвращает ошибку отсутствия данных или неверного формата запроса.

Решение: Если через ваш веб-сервер проходят программные интеграции, используйте для перенаправления коды состояния 307 Temporary Redirect или 308 Permanent Redirect. Согласно спецификации HTTP, эти коды строго запрещают клиенту изменять метод запроса (например, с POST на GET) при перенаправлении.

Пример настройки безопасного редиректа с кодом 307 через mod_rewrite:


RewriteEngine on
RewriteCond %{HTTPS} =off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=307]

Автоматическое определение локали (ru_RU)

В начале обсуждения автор темы упоминал необходимость ручной адресации пользователя на адрес вида https://Server/Baza/ru_RU. Стоит отметить, что при корректно настроенном глобальном редиректе на уровне веб-сервера (когда адрес http://Server/Baza успешно трансформируется в https://Server/Baza) ручное прописывание суффикса локали (/ru_RU) в правилах Apache не требуется.

Платформа веб-клиента 1С спроектирована таким образом, что при первом обращении к защищенному адресу базы она автоматически анализирует языковые настройки браузера пользователя или параметры операционной системы и самостоятельно перенаправляет сессию на нужный языковой URL-адрес. Дополнительное жесткое кодирование локали в правилах редиректа Apache может лишь усложнить конфигурацию и вызвать проблемы у пользователей с другими языковыми предпочтениями.

Альтернативный современный подход: Nginx в качестве SSL-терминатора перед Apache

В крупных, высоконагруженных или активно развивающихся инфраструктурах администрирование SSL-сертификатов (особенно регулярное автопродление бесплатных сертификатов Let's Encrypt) непосредственно на веб-сервере Apache может вызывать административные сложности. В таких случаях мы рекомендуем рассмотреть современную и надежную схему: Nginx + Apache.

Проанализируем архитектуру этого решения:

Такой подход существенно снижает нагрузку на центральный процессор сервера, упрощает настройку редиректов (в Nginx это делается буквально одной строкой return 301 https://$host$request_uri;) и изолирует публикацию баз 1С от прямого воздействия внешней сети.

← На главную