Интересно, какой «лучший» и рекомендуемый метод настройки доменов SSL на одном IP, где есть перенаправления с: 80 на: 443. Это не было полностью рассмотрено здесь, потому что мне нужны эти перенаправления ( https://httpd.apache.org/docs/2.4/vhosts/name-based.html )
Домены определены в DNS и все перенаправляются на один и тот же IP-адрес:
У меня много проблем с настройкой так, чтобы они были на одном IP-адресе. Идея состоит в том, чтобы сначала определить нормальный:80 виртуальных серверов, которые перехватывают протокол http: // и перенаправляют на https: //. Тогда правильная конфигурация в целом определяется в *: 443 как виртуальный хост на основе имени. Тем не менее, я хотел бы иметь какой-то фиктивный виртуальный хост по умолчанию, который будет иметь пустую страницу в собственном обычном корневом документе, и только когда запрос относится к определенному домену (например, в set1 или set2), должен быть загружен весь виртуальный хост для определенного домена . Я решил не использовать Rewrites, потому что для такой задачи рекомендуются простые редиректы. Использование перенаправления сработало только в моем случае для одного домена.
Моя настройка следующая:
<Virtualhost *:80>
ServerName example1.com
Redirect / https://example1.com
</Virtualhost>
<Virtualhost *:80>
ServerName example1.org
Redirect / https://example1.org
</Virtualhost>
<VirtualHost *:443>
ServerName example1.com
DocumentRoot .......
.......
</VirtualHost>
<VirtualHost *:443>
ServerName example1.org
DocumentRoot .......
.......
</VirtualHost>
<VirtualHost *:443>
ServerName example2.com
DocumentRoot .......
.......
</VirtualHost>
<VirtualHost *:443>
ServerName example2.info
DocumentRoot .......
.......
</VirtualHost>
Одна из проблем с этой настройкой заключается в том, что она не работает. Другая проблема в том, что это повторяется много раз. Думаю, мне нужно настроить что-то вроде этого (psedoconfig):
фиктивная конфигурация, поймать например чистые IP-запросы и т. д.<Виртуальный домен для example1.com и .org> если запрошен http, перенаправить на https и для обоих доменов определить одну и ту же настройку определил корневой каталог документов, все журналы и сертификаты для этих доменов и т. д.
<Другой виртуальный пример2 .com и .info> здесь снова - если запрашивается http, перейдите на https общий документ root, логи и т. д.
Я думаю, что с этим справится кто-нибудь, имеющий опыт перенаправления, или, может быть, есть какой-то предпочтительный способ, который я упустил.
РЕДАКТИРОВАТЬ: Хорошо, теперь конфигурация протестирована, и я уверен, что знаю, что у меня есть. И, к сожалению, это не работает.
Я выпустил сертификаты SSL для каждого сайта, использующего acme.sh, набрав (домены изменены из-за конфиденциальности):
acme.sh --issue -d www.AAA.com -d AAA.com -d www.AAA.info -d AAA.info -w /home/path/aaa/www
cd /home/path/aaa/etc
acme.sh --install-cert -d www.AAA.com -d AAA.com -d www.AAA.info -d AAA.info --cert-file cert.pem --key-file priv.pem --fullchain-file fullchain.pem
Это сработало хорошо, но apache conf настроил ТОЛЬКО этот единственный домен в vhost и ssl-часть имела несколько поддельных / старых сертификатов, позволяющих запускать Apache. Сертификат был протестирован, и страница была загружена в браузер с использованием адреса http://AAA.com , который был правильно перенаправлен на https://AAA.com , который также работал.
Затем я перенастроил apache для поддержки домена PPP.com, используя аналогичную процедуру. Это также сработало, когда я настроил apache только для одного домена. Теперь объединение этих двух конфигураций НЕ РАБОТАЕТ, потому что PPP.com распознается как имеющий сертификат AAA.com, который вызывает ошибку NET :: ERR_CERT_COMMON_NAME_INVALID
Итак, я застрял. Вот моя конфигурация apache для виртуальных хостов: https://pastebin.com/hK3g6K3m
Часть, включенная как common.cfg, содержит только стандартные параметры SSL и конфигурацию доступа к каталогу, конфигурацию журналов и т. Д.
Я не пробовал, чего вы хотите достичь, но если бы я попробовал, я бы сделал это так:
При выполнении ssl вы должны учитывать свои сертификаты. Например, если у вас есть один сертификат для example1.com и example1.org, вы можете просто создать один VirtualHost
с основным ServerName
и вторичным (или несколькими) ServerAlias
. Если у вас есть независимые сертификаты для каждого домена,вам необходимо разделить все на отдельные VirtualHost
, поскольку у вас не может быть несколько сертификатов на одном уровне.
Кроме того, в версиях до 2.4 NameVirtualHost *: 443
равно ] обязательный перед любым VirtualHost
для apache для выполнения части SNI, то есть для отображения запрашиваемого сертификата, а не сертификата по умолчанию.
https по умолчанию будет первым VirtualHost *: 443
вы определяете, поэтому просто перемещайте их по своему усмотрению.
Что касается части http, если все будет перенаправлено на саму версию https (ничто не обслуживается http), вы можете создать единый VirtualHost *: 80
со всеми необходимыми ServerAlias
(это не обязательно, но для пояснения) и использовать одно RewriteRule
, например:
RewriteRule "^/?(.*)" "https://%{HTTP_HOST}/%1" [L,R,NE]
Я не тестировал его, но он должен работать.
ПРИМЕЧАНИЕ: я не использую Redirect
, потому что я не знаю, позволяет ли это окружение tal переменной в части замены, но вы также можете попробовать это.