Apache игнорирует второй виртуальный хост

Apache игнорирует второй виртуальный хост

мы используем Apache на сервере Ubuntu для размещения наших веб-сайтов. SSL-сертификаты предоставляются LetsEncrypt, и все работало отлично в течение последних лет.

В прошлую пятницу я пытался обновить один из сертификатов, и это не сработало. Папки .well-known/acme-challenge не создаются, я пробовал несколько вещей в последние дни, и теперь все стало еще хуже: у нас есть основной домен domain1.de и второй домен domain2.com. domain1.de отлично работает с SSL. domain2.com теперь всегда показывает сайт domain1.de.

Файлы конфигурации для domain1.de:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName domain1.de
ServerAlias www.domain1.de
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

и SSL-сертификат:

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
    ServerAdmin webmaster@localhost
    ServerName domain1.de
    ServerAlias www2.domain1.de
    
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    
    SSLEngine on
    SSLCertificateFile      /etc/letsencrypt/live/www2.domain1.de/cert.pem
    SSLCertificateKeyFile   /etc/letsencrypt/live/www2.domain1.de/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/www2.domain1.de/fullchain.pem
    
    <FilesMatch "\.(cgi|shtml|phtml|php)$">
         SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
        SSLOptions +StdEnvVars
    </Directory>
</VirtualHost>
</IfModule>

Файлы конфигурации для domain2.com:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName domain2.com
ServerAlias www.domain2.com
DocumentRoot /var/www/domain2.com
ErrorLog ${APACHE_LOG_DIR}/error_journalsuite_com.log
CustomLog ${APACHE_LOG_DIR}/access_journalsuite_com.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =domain2.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Вывод apachectl -S:

root@domain1new /var/www/domain2.com # apachectl -S
VirtualHost configuration:
*:443                  domain1.de (/etc/apache2/sites-enabled/domain1.de-ssl.conf:2)
*:80                   is a NameVirtualHost
         default server domain1.de (/etc/apache2/sites-enabled/domain1.de.conf:1)
         port 80 namevhost domain1.de (/etc/apache2/sites-enabled/domain1.de.conf:1)
                 alias www2.domain1.de
         port 80 namevhost domain2.com (/etc/apache2/sites-enabled/domain2.com.conf:1)
                 alias www.domain2.com
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex ssl-stapling: using_defaults
Mutex proxy: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling-refresh: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33

Я потратил некоторое время на поиски здесь и на других сайтах, и сейчас я заблудился. Есть какие-нибудь советы или идеи?

Спасибо

решение1

У вас отсутствует конфигурация для HTTPS-порта 443 для domain2.com. HTTP с портом 80 работает. Если вы проверите его с помощью , то curl -v http://domain2.comувидите, что он работает, но перенаправляет на https://domain2.com(согласно вашему RewriteRule), который не имеет правильной конфигурации и использует значение по умолчанию VirtualHost _default_:443для домена domain1.de. Если вы проверите с помощью , curl -v -k https://domain2.comто увидите, что он представляет сертификат TLS для domain1.deи делает это 301 Redirectдля https://www2.domain1.de/.

Чтобы решить вашу проблему, вам необходимо создать <VirtualHost *:443>соответствующие ServerName domain2.comнастройки конфигурации SSLEngine.

Связанный контент