Перенаправление с http на https в apache
Задача: перенаправить http запросы на защищенное https соединение например, запрос http://site.domain.ru будет перенаправлен на httpS://site.domain.ru
Конфигурация: Debian 6, apache2.2.16
Примечание: в данной статье не рассматривается генерация ключей и сертификатов.
1. Включаем поддержку необходимых модов в 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 определенный правилом.
2. Редактируем 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> |
3. Настраиваем 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 |
Как это работает: запрос вида 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 и будет установлена защищенная сессия.
Добавить комментарий