При публикации информационных баз 1С на веб-сервере крайне важно обеспечить безопасность передаваемых данных. Использование защищенного протокола HTTPS защищает учетные данные пользователей и конфиденциальную информацию компании от перехвата. Однако пользователи часто по привычке вводят простой адрес вида http://Server/Baza. В этой ситуации перед администратором встает задача: настроить автоматическое перенаправление (редирект) всех входящих HTTP-запросов на безопасное HTTPS-соединение.
В этой статье мы подробно разберем, почему стандартные методы настройки редиректа через файлы локальных конфигураций могут не работать с базами 1С, как правильно настроить перенаправление на уровне глобальной конфигурации веб-сервера Apache, а также рассмотрим важные нюансы, связанные с работой веб-сервисов и использованием альтернативных архитектурных решений.
Многие системные администраторы пытаются настроить редирект привычным способом — созданием или редактированием файла .htaccess в каталоге публикации базы 1С, добавляя туда стандартные директивы модуля mod_rewrite. Однако при работе с платформой 1С этот метод часто дает сбои или полностью игнорируется сервером. Выясним основные причины этой проблемы:
wsap24.dll для Windows или mod_wsap24.so для Linux). Этот модуль перехватывает все запросы к виртуальному каталогу базы на очень ранней стадии обработки запроса сервером Apache. Если правила редиректа описаны на уровне каталога (в файле .htaccess), Apache часто просто не успевает применить их до того, как управление будет передано модулю 1С..htaccess по умолчанию отключена. Для системных каталогов директива AllowOverride установлена в значение None. Чтобы сервер начал читать конфигурационные файлы из папок публикации, в основном файле httpd.conf необходимо вручную переопределить эту директиву на AllowOverride All..htaccess и файл параметров публикации default.vrd) могут быть полностью перезаписаны или сброшены в исходное состояние при любой повторной публикации базы из конфигуратора 1С или при обновлении платформы с помощью утилиты webinst.Именно поэтому наиболее надежным, отказоустойчивым и профессиональным решением является настройка редиректа на уровне глобальной конфигурации веб-сервера Apache, а именно в файлах httpd.conf или 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>
Разберем подробнее, как работают эти директивы:
RewriteEngine on — активирует работу механизма преобразования URL-адресов.RewriteCond %{HTTPS} =off — задает условие применения правила: редирект сработает только в том случае, если текущее соединение не является защищенным (HTTPS отключен).RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] — само правило перенаправления. Оно берет весь запрошенный путь (%{REQUEST_URI}) вместе с хостом (%{HTTP_HOST}) и перенаправляет клиента на аналогичный адрес, но с протоколом https://. Флаг [L] означает, что это последнее правило в списке, а флаг [R=301] указывает браузеру на постоянный редирект (301 Moved Permanently), что позволяет кэшировать это перенаправление на стороне клиента.Шаг 4. Обязательно убедимся, что в главном конфигурационном файле httpd.conf раскомментирована строка подключения модуля перезаписи:
LoadModule rewrite_module modules/mod_rewrite.so
Шаг 5. Перезапустим службу веб-сервера 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 / сообщает веб-серверу, что абсолютно любой запрос, пришедший на корень (/) незащищенного сайта, должен быть мгновенно перенаправлен на соответствующий защищенный адрес с сохранением всего остального пути. Это решение работает быстрее, проще читается и исключает вероятность ошибок при разборе сложных регулярных выражений.
Если ваша опубликованная база 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]
В начале обсуждения автор темы упоминал необходимость ручной адресации пользователя на адрес вида https://Server/Baza/ru_RU. Стоит отметить, что при корректно настроенном глобальном редиректе на уровне веб-сервера (когда адрес http://Server/Baza успешно трансформируется в https://Server/Baza) ручное прописывание суффикса локали (/ru_RU) в правилах Apache не требуется.
Платформа веб-клиента 1С спроектирована таким образом, что при первом обращении к защищенному адресу базы она автоматически анализирует языковые настройки браузера пользователя или параметры операционной системы и самостоятельно перенаправляет сессию на нужный языковой URL-адрес. Дополнительное жесткое кодирование локали в правилах редиректа Apache может лишь усложнить конфигурацию и вызвать проблемы у пользователей с другими языковыми предпочтениями.
В крупных, высоконагруженных или активно развивающихся инфраструктурах администрирование SSL-сертификатов (особенно регулярное автопродление бесплатных сертификатов Let's Encrypt) непосредственно на веб-сервере Apache может вызывать административные сложности. В таких случаях мы рекомендуем рассмотреть современную и надежную схему: Nginx + Apache.
Проанализируем архитектуру этого решения:
127.0.0.1:8080) без поддержки SSL. Его единственная задача — принимать чистый HTTP-трафик от Nginx и передавать его через проприетарный wsap-модуль платформы в информационную базу 1С.Такой подход существенно снижает нагрузку на центральный процессор сервера, упрощает настройку редиректов (в Nginx это делается буквально одной строкой return 301 https://$host$request_uri;) и изолирует публикацию баз 1С от прямого воздействия внешней сети.