Использование mod_rewrite для имитации виртуальных хостов SSL?
-
08-06-2019 - |
Вопрос
Как лучше всего прозрачно перезаписать URL-адрес через SSL-соединение с помощью Apache 2.2?
Apache 2 изначально не поддерживает несколько виртуальных хостов на основе имен для SSL-соединения, и я слышал, что mod_rewrite может в этом помочь.Я хотел бы сделать что-то вроде этого:
Я настроил сервер так, чтобы к сайтам могли получить доступ
https://secure.example.com/dbadmin
но я бы хотел, чтобы это было так https://dbadmin.example.com
Как настроить так, чтобы правило перезаписи переписывало dbadmin.example.com на secure.example.com/dbadmin, но без отображения перезаписи в адресной строке клиента (т. е.клиент по-прежнему будет видеть только dbadmin.example.com), по всему https?
Решение
Настройте один VirtualHost для обслуживания как Secure.example.com, так и dbadmin.example.com (что делает его единственным *:443 VirtualHost, который достигает этого).Затем вы можете использовать mod_rewrite чтобы настроить URI для запросов к dbadmin.example.com:
<VirtualHost *:443>
ServerName secure.example.com
ServerAlias dbadmin.example.com
RewriteEngine on
RewriteCond %{SERVER_NAME} dbadmin.example.com
RewriteRule !/dbadmin(.*)$ /dbadmin$1
</VirtualHost>
Ваш SSL-сертификат должен быть действителен как для secure.example.com, так и для dbadmin.example.com.Это может быть групповой сертификат, как упоминал Терри Лорбер, или вы можете использовать субъектAltName поле для добавления дополнительных имен хостов.
Если у вас возникли проблемы, сначала настройте его на <VirtualHost *>
и проверьте, работает ли он без SSL.SSL-соединение и сертификат — это отдельный уровень сложности, который можно настроить после того, как перезапись URI заработает.
Другие советы
Если ваш SSL-сертификат не является «подстановочным» или многосайтовым, я не думаю, что это сработает.Перезапись отобразится в браузере, и имя в адресной строке должно соответствовать сертификату, иначе ваши пользователи увидят ошибку безопасности (которую они всегда могут принять и продолжить, но это не похоже на то, что вам хотелось бы). ).
Более здесь.
Существует apache mod_rewrite, или вы можете настроить apache для прямого доступа. https://dbadmin.example.com путь/to/example.com/dbadmin на сервере
<VirtualHost *>
ServerName subdomain.domain.com
DocumentRoot /home/httpd/htdocs/subdomain/
</VirtualHost>