На моем сервере настроено несколько виртуальных хостов. Два из них должны иметь следующее поведение, так что в конечном итоге он всегда должен быть перенаправлен на https: // www.....
например, я помещаю в адресную строку следующее: domain1.tld
Он перенаправляет на www.domain1.tld -> перенаправляет на -> https: //www.domain1.tld
Настройка выглядит так ...
<VirtualHost *:80>
ServerName domain1.tld
Redirect permanent / http://www.domain1.tld
</VirtualHost>
<VirtualHost *:80>
ServerName www.domain1.tld
###### more settings ####
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.domain1.tld
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Другой виртуальный хост имеет точно такую же конфигурацию:
<VirtualHost *:80>
ServerName domain2.tld
Redirect permanent / http://www.domain2.tld
</VirtualHost>
<VirtualHost *:80>
ServerName www.domain2.tld
#### more settings ####
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.domain2.tld
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Но то, что здесь происходит, очень странно. Когда я вхожу www.domain2.tld в адресную строку, он будет перенаправлен на https: //www.domain2.tld успешно. Но когда я вхожу domain2.tld в адресную строку, он перенаправляет на https: //domain2.tld и я получаю значение по умолчанию "Не подключался: потенциальная проблема безопасности"страница с сообщением об ошибке:
Error code: SSL_ERROR_BAD_CERT_DOMAIN
Если я просматриваю сертификат, он показывает мне сертификат из моей конфигурации третьего домена: subdomain1.domain1.tld. Этот виртуальный хост может существовать как с http, так и с https, поэтому конфигурация выглядит немного иначе. У него нет перенаправления:
<VirtualHost *:80>
ServerName subdomain1.domain1.tld
##### more settings ####
</VirtualHost>
Но это не должно быть проблемой. Проблема в:
Когда я вхожу domain2.tld в адресную строку, почему этот домен не перенаправляет на HTTPS должным образом и не получает сертификат третьего домена?
Что дополнительно сказать: домен2 расположен у другого поставщика домена (который указывает на IP-адрес моего сервера), поэтому настройка DNS выглядит немного иначе (поскольку этот параметр не был таким же, как у моего поставщика domain1). Может ли это проблема (на уровне DNS)?
Настройка domain1 (рабочий):
Для домена 2 такие настройки сделать не могу. Вместо этого настройки выглядят так:
*.domain2.tld A [IP OF MY SERVER]
ftp.domain2.tld A [IP OF MY SERVER]
domain2.tld A [IP OF MY SERVER]
mail.domain2.tld A [IP OF MY SERVER]
[ОБНОВИТЬ]
Я также добавляю сюда конфигурацию SSH виртуального хоста для domain2.tld.
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName www.domain2.tld
#### more settings ####
SSLCertificateFile /etc/letsencrypt/live/www.domain2.tld/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.domain2.tld/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
[ОБНОВИТЬ]
Просто для тестирования я полностью отключил domain2.tld.conf (это означает конфигурацию сайта без https) в / и т.д. / apache2 / сайты с поддержкой (а2диссит). Поведение должно быть таким, что работает только версия https. Я даже перезапустил apache, но это сбивает с толку: поведение веб-сайта остается прежним. Это означает, что когда я вхожу www.domain2.tld в адресную строку, сайт по-прежнему перенаправляется на https: //www.domain2.tld. Как такое возможно ?! Откуда взялось это перенаправление, ведь для него больше нет активного условия перезаписи? Только сайт с <VirtualHost *:443>
состояние есть в наличии. (И я почистил кеш браузера и данные).
[ОБНОВИТЬ]
Путаница с этим существующим перенаправлением заключалась в том, что каждый браузер каким-то образом сохраняет информацию о перенаправлении (хотя они не должны этого делать), но я не могу сбросить это глупое поведение, очистив кеш и данные. Интересно, как я могу проверить настройки сервера, если браузер все время делает странные вещи.
Я также попытался сузить проблему, но кажется, что RewriteRule и / или RewriteCond в domain2.tld вообще не работают. Это мой текущий пример конфигурации domain2:
<VirtualHost *:80>
ServerAdmin [myself]@gmail.com
ServerName www.domain2.tld
ServerAlias domain2.tld *.domain2.tld
DocumentRoot /var/www/www.domain2.tld
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/www.domain2.tld/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/domain2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog "|/usr/bin/rotatelogs ${APACHE_LOG_DIR}/domain2/access-%Y-%m-%d.log 86400" combined
#CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.domain2.tld
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Если я попробую использовать совершенно другое правило перезаписи веб-сайта, оно будет проигнорировано. Так что здесь должно быть что-то совершенно неправильное.
[ОБНОВЛЕНИЕ + РЕШЕНИЕ]
Очевидно, вся эта путаница (и неправильная конфигурация) происходит, потому что все браузеры, которые я использовал, хранят эти глупые неправильные перенаправления в кеше, от которого я не могу избавиться (по крайней мере, в FF, он все еще не работает, хотя я все очистил). Я задам это как отдельный вопрос.
Решение для обоих доменов - это ответ Лео, и он довольно прост:
<VirtualHost *:80>
ServerName domain2.tld
Redirect permanent / https://www.domain2.tld
</VirtualHost>
<VirtualHost *:80>
ServerName www.domain2.tld
Redirect permanent / https://www.domain2.tld
</VirtualHost>
Я могу подтвердить, что это работает, потому что я тестировал его с полным чистым браузером (и устройством), который я никогда раньше не использовал для вызова domain2.tld. Я тестировал его со старым Firefox на другом устройстве, и он там тоже работает. Вывод: Firefox на моей основной машине - единственный, который не может обрабатывать перенаправление. Не знаю почему. По иронии судьбы, именно этот Firefox должен справиться с этим лучше всего, потому что у меня установлено множество конфигураций и надстроек защиты от слежения, поэтому я получаю «чистый» Firefox при каждом запуске. Вот почему я полностью сбит с толку.
Насколько я могу судить, вы делаете двойное перенаправление, используя перенаправление + перезапись. В этом не должно быть необходимости (и поскольку вы не разместили все файлы конфигурации apache, включая файлы в /etc/apache2/conf.d и сайты с поддержкой или аналогичные), у вас также может быть отсутствующий параметр или что-то перезаписывающее в отношении настроек SSL.
Например, попробуйте что-нибудь подобное. domain1.tld.conf
<VirtualHost *:80>
ServerName domain1.tld
Redirect permanent / https://www.domain1.tld
</VirtualHost>
<VirtualHost *:80>
ServerName www.domain1.tld
Redirect permanent / https://www.domain1.tld
</VirtualHost>
ИЛИ вы даже можете упростить его до одного VirtualHost и одного файла для тестирования с использованием псевдонима:
<VirtualHost *:80>
ServerName domain1.tld
ServerAlias www.domain1.tld
Redirect permanent / https://www.domain1.tld
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName www.domain1.tld
....
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/www.domain1.tld/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.domain1.tld/privkey.pem
...
</VirtualHost>
</IfModule>
Конечно, чтобы это работало, у вас также должен быть рабочий HTTPS VirtualHost с действующим сертификатом SSL и модулями SSL и Headers, включенными в Apache (a2enmod ssl
, a2enmod headers
). Вероятно, вам следует проверить это при прямом подключении к HTTPS-версиям сайтов. Если версия HTTPS работает некорректно, перенаправления не будут выполнены.
Что касается вашего обновленные вопросы Что касается перенаправлений, которые все еще работают после удаления конфигурации для простого VirtualHost в порту 80, вы, вероятно, страдаете от кеша вашего веб-браузера или чего-то в этом роде. Если вы хотите попробовать сайт HTTPS, а не перенаправления, просто заполните URL-адрес целым протоколом и поддоменом. https://www.domain1.tld
, вы также можете использовать другой браузер (или частные окна) для выполнения переопределения кеша.
И вы всегда должны проверять /var/log/apache2
файлы журнала, access.log
и error.log
будет полезно при отладке проблем.