Задача: перенаправить http запросы на защищенное https соединение например, запрос http://site.domain.ru будет перенаправлен на httpS://site.domain.ru Конфигурация: Debian 6, apache2.2.16
Примечание: в данной статье не рассматривается генерация ключей и сертификатов.
- Включаем поддержку необходимых модов в apache:
|
1 2 3 4 5 |
# ln -s /etc/apache2/mods-available/vhost_alias.load /etc/apache2/mods-enabled/vhost_alias.load # ln -s /etc/apache2/mods-available/vhost_alias.conf /etc/apache2/mods-enabled/vhost_alias.conf # ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load # ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf # ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load |
vhost_alias – позволяет на одном IP адресе поддерживать несколько виртуальных хостов; ssl – поддержка шифрования SSL (в данной статье настройка SSL не рассматривается); rewrite – изменяет запрошенный пользовательский URL на URL определенный правилом.
- Редактируем vhost_alias:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# nano /etc/apache2/mods-enabled/vhost_alias.conf <VirtualHost *:80> # Данный VirtualHost обрабатывает HTTP запросы для домена site.domain.ru ServerAdmin admin@domain.ru ServerName site.domain.ru DocumentRoot “/data/www/site” </VirtualHost> <VirtualHost *:443> # Данный VirtualHost обрабатывает HTTPS запросы для домена site.domain.ru включая переадресованные ServerAdmin admin@domain.ru ServerName site.domain.ru DocumentRoot “/data/www/site” <Directory “/data/www/site”> Options Indexes Allow from all AllowOverride All DirectoryIndex index.php </Directory> # Включаем поддержку SSL и указываем пару ключ+сертификат SSLEngine on SSLCertificateFile /etc/ssl/certs/domain.ru.crt SSLCertificateKeyFile /etc/ssl/private/domain.ru.key </VirtualHost> |
- Настраиваем rewrite
|
1 2 3 4 5 6 7 8 9 |
# nano /data/www/site/.htaccess # Включаем поддержку rewrite и определяем правило замены URL RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L] # Дополнительные опции не имеющие отношения к rewrite Options +FollowSymLinks Options –MultiViews Allow from All |
(adsbygoogle = window.adsbygoogle || []).push({});
Как это работает: запрос вида http://site.domain.ru будет обработан правилом <VirtualHost :80> определенным в файле vhost_alias.conf, согласно которму apache прочитает содержимое каталога “/data/www/site” определеного директивой DocumentRoot. Apache первым делом проверит наличие файла .htaccess и выполнит перенаправление согласно директивам Rewrite, изменив URL http://site.domain.ru на https://site.domain.ru. Измененную URL https://site.domain.ru обработает правило <VirtualHost :443> в котором указаны директивы SSL и будет установлена защищенная сессия.