Назад | Перейти на главную страницу

Тот же сервер, разные виртуальные хосты Apache, перенаправление не работает для одного из них

На моем сервере настроено несколько виртуальных хостов. Два из них должны иметь следующее поведение, так что в конечном итоге он всегда должен быть перенаправлен на 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 будет полезно при отладке проблем.