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

На моем сервере есть несколько виртуальных хостов настроен. Два из них должны иметь следующее поведение, так что, в конце концов, он всегда должен быть перенаправлен на https: // www .....

например, я помещаю следующее в URL bar: 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 в строку URL-адреса, он перенаправляется на https: //domain2.tld , и я получаю значение по умолчанию « Did Not Connect: Potential Security Issue »с сообщением об ошибке:

Error code: SSL_ERROR_BAD_CERT_DOMAIN

Если я просматриваю сертификат, он показывает мне сертификат из моей конфигурации третьего домена: subdomain1.domain1.tld . Этот виртуальный хост может существовать как с http, так и с https, поэтому конфигурация выглядит немного иначе. У него нет перенаправления:

<VirtualHost *:80>
        ServerName subdomain1.domain1.tld

    ##### more settings ####

</VirtualHost>

Но это не должно быть проблемой. Проблема заключается в следующем:

Когда я ввожу domain2.tld в адресную строку, почему этот домен не перенаправляется на HTTPS должным образом и не получает сертификат 3-го домена?

Что дополнительно нужно сказать : домен2 расположен у другого поставщика домена (который указывает на IP-адрес моего сервера), поэтому настройка DNS выглядит немного иначе (поскольку этот параметр не был таким же, как у моего поставщика домена1). Может быть, это проблема (на уровне DNS)?

Настройка домена 1 (рабочий):
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) в / etc / apache2 / с поддержкой сайтов (a2dissite). Поведение должно быть таким, что работает только версия https. Я даже перезапустил apache, но это сбивает с толку: поведение веб-сайта остается прежним. Это означает, что когда я ввожу www.domain2.tld в адресную строку, сайт по-прежнему перенаправляется на https: //www.domain2.tld . Как такое возможно ?! Откуда это перенаправление, если для этого больше нет активного условия перезаписи? Доступен только сайт с условием . (И я очистил кеш браузера и данные).

[ОБНОВЛЕНИЕ]
Путаница с существующим перенаправлением заключалась в том, что каждый браузер каким-то образом сохраняет информацию о перенаправлении (хотя они и не должны), но я не могу сбросить это глупое поведение, очистив кеш и данные. Интересно, как я могу проверить настройки сервера, если браузер все время делает странные вещи.
Я также попытался сузить проблему, но кажется, что 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 при каждом запуске. Вот почему я полностью сбит с толку.

2
задан 27 April 2019 в 22:41
1 ответ

Насколько я могу судить, вы выполняете двойное перенаправление, используя перенаправление + перезапись. В этом нет необходимости (и поскольку вы не разместили все файлы конфигурации 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 и заголовков в Apache ( a2enmod ssl , заголовки a2enmod ). Вероятно, вам следует проверить это при подключении напрямую к HTTPS-версиям сайтов. Если версия HTTPS работает некорректно, перенаправления не будут выполнены.

Что касается ваших обновленных вопросов о перенаправлениях, которые все еще работают после удаления конфигурации для простого VirtualHost на порту 80, вы, вероятно, страдаете от кеш вашего веб-браузера или что-то в этом роде. Если вы хотите попробовать сайт HTTPS, а не перенаправления, просто заполните URL-адрес полным протоколом и субдоменом https: //www.domain1.tld , вы также можете использовать другой браузер (или частные окна ), чтобы выполнить переопределение кеша.

И вы всегда должны проверять файлы журнала / var / log / apache2 , access.log и error.log ] поможет в устранении неполадок.

2
ответ дан 3 December 2019 в 11:23

Теги

Похожие вопросы