При разработке и тестировании веб-клиента «1С:Предприятие» в защищенном режиме часто возникает неудобство: при нажатии клавиши F5 или кнопки начала отладки в Конфигураторе, система автоматически запускает браузер по протоколу http://. Разработчикам приходится каждый раз вручную дописывать букву «s» в адресной строке браузера, чтобы переключиться на безопасное соединение https://.
В этой статье мы подробно разберем, почему так происходит, устраним популярные заблуждения из обсуждений на форумах и рассмотрим три практических способа настройки веб-сервера Apache 2.4 под управлением Windows для автоматического перенаправления (редиректа) запросов на HTTPS.
Давайте проанализируем поведение самой платформы «1С:Предприятие». В диалоговом окне «Публикация на веб-сервере» (которое открывается через меню Администрирование -> Публикация на веб-сервере) физически нет настроек, позволяющих выбрать протокол по умолчанию. 1С оперирует только именем публикации и физическим каталогом на диске.
При компиляции и запуске отладки Конфигуратор генерирует URL-адрес по жестко зашитому шаблону, всегда подставляя префикс http://. Изменить это внутреннее поведение платформы невозможно. Единственное правильное и архитектурно верное решение — настроить сам веб-сервер Apache так, чтобы он налету перехватывал незащищенные запросы на порту 80 и перенаправлял их на защищенный порт 443.
В процессе обсуждения подобных проблем на форумах часто можно встретить совет отредактировать системный файл Windows по пути C:\Windows\System32\drivers\etc\hosts. Проанализируем этот совет.
Это грубая ошибка! Файл hosts является локальной альтернативой службы DNS (Domain Name System). Его единственная задача — сопоставлять текстовые доменные имена (например, mysite.local) с IP-адресами (например, 127.0.0.1). Файл hosts работает на сетевом уровне и абсолютно ничего не знает о протоколах передачи данных (HTTP/HTTPS) и номерах портов (80/443). С его помощью невозможно настроить перенаправление. Все манипуляции мы будем проводить исключительно в конфигурационных файлах самого веб-сервера Apache.
Перед тем как приступить к настройке любого из способов, обязательно откройте ваш текстовый редактор (например, Блокнот или Notepad++) от имени Администратора. В противном случае операционная система Windows не разрешит вам сохранить изменения в защищенных папках программ.
Если на вашем локальном компьютере развернута тестовая среда и вы не используете сложные конфигурации с множеством виртуальных хостов, проще всего настроить перенаправление глобально для всего веб-сервера.
Выполним следующие шаги:
C:\Apache24\conf\ или папка внутри каталога публикации, в зависимости от того, как вы устанавливали веб-сервер).httpd.conf.mod_rewrite. Для этого воспользуемся поиском по файлу и найдем строчку:
LoadModule rewrite_module modules/mod_rewrite.so. Если в начале этой строки стоит символ решетки #, обязательно удалим его, тем самым активировав модуль.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
httpd.conf.services.msc, найдите службу Apache и нажмите «Перезапустить») или с помощью утилиты Apache Monitor в трее.Теперь при нажатии F5 в Конфигураторе 1С откроется ссылка http://localhost/имя_базы, но Apache мгновенно вернет браузеру статус 301 (постоянное перенаправление), и страница автоматически перезапустится по адресу https://localhost/имя_базы.
Иногда требуется настроить редирект не для всего веб-сервера целиком, а только для конкретной публикации 1С. Для этого используется файл дополнительной конфигурации .htaccess, располагающийся в каталоге публикации базы (там же, где лежит файл default.vrd).
По умолчанию в Apache под управлением Windows обработка файлов .htaccess отключена в целях повышения производительности. Разберем, как её включить и настроить по шагам:
httpd.conf.
<Directory "C:/Apache24/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
AllowOverride None на AllowOverride All. Это разрешит веб-серверу читать файлы конфигурации .htaccess в подкаталогах.httpd.conf и перезапустим службу Apache.default.vrd..htaccess (обратите внимание на точку в начале и отсутствие расширения .txt).
RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
Этот способ удобен тем, что настройки применяются мгновенно без необходимости перезапускать весь веб-сервер Apache при каждом изменении файла .htaccess.
Современный и безопасный метод — использование механизма HSTS (HTTP Strict Transport Security). При таком подходе веб-сервер при первом же успешном обращении по HTTPS передает браузеру специальный заголовок. Браузер запоминает, что к этому сайту (в нашем случае к localhost) нужно обращаться исключительно по HTTPS. В дальнейшем, когда 1С будет пытаться открыть ссылку по HTTP, сам браузер преобразует запрос в HTTPS еще до отправки его на сервер.
Для настройки выполним следующие действия:
httpd.conf раскомментируем (уберем символ #) модуль заголовков:
LoadModule headers_module modules/mod_headers.soconf/extra/httpd-ssl.conf или в самом httpd.conf внутри тегов <VirtualHost *:443>).
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Браузер получит этот заголовок и запомнит правило на один год (значение параметра max-age в секундах). Теперь при нажатии F5 редирект будет происходить мгновенно на уровне клиентского приложения.
После успешной настройки автоматического перенаправления на HTTPS вы можете столкнуться с тем, что в веб-клиенте перестанет работать отладка. Это происходит потому, что по умолчанию отладчик пытается связаться с базой по незащищенному каналу.
Чтобы отладка работала стабильно в условиях использования SSL, настроим в 1С отладку по протоколу HTTP:
http://localhost:1561). При необходимости выполним повторную публикацию.Полезный совет: в процессе тестирования различных способов редиректа обязательно очищайте кэш вашего браузера. Современные браузеры (особенно Google Chrome и Яндекс.Браузер) очень агрессивно кэшируют перенаправления со статусом 301. Если вы измените настройки в файлах конфигурации Apache, браузер может продолжать использовать старое (возможно, ошибочное) правило из своего локального кэша.