Интересно, какой "лучший" и рекомендуемый метод настройки доменов 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):
dummy configuration, catch for example pure IP requests, etc.<Virtualdomain для example1.com и .org>, если запрашивается http, перенаправьте на https и для обоих доменов определите одну и ту же настройку, определенную корневым каталогом документа, все журналы и сертификаты для этих доменов и т. Д.
<AnotherVirtual, например, example2 .com и .info> здесь снова - если запрашивается http, перейдите в общий каталог документов https, журналы и т. Д.
Я думаю, что с этим справится кто-нибудь, умеющий перенаправлять, или, может быть, есть какой-то предпочтительный способ, который я упустил.
РЕДАКТИРОВАТЬ: ОК, теперь конфигурация проверена, и я уверен, что знаю, что у меня есть. И, к сожалению, не работает.
Я выпустил сертификаты 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
потому что я не знаю, допускает ли он переменную окружения в части замены, но вы также можете попробовать это.
Я не пробовал себя, чего вы хотите достичь, но если бы я попробовал, я бы сделал это так: