Apache всегда загружает один и тот же хост - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть следующие vhosts.Однако при использовании https vhosts всегда разрешают app.home, и единственный способ заставить его загружать cloud.home - удалить app.home из vhosts.Это заставляет меня поверить, что оно игнорирует настройку ServerName.

app.home.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
   ServerName app.home
  ProxyPreserveHost On
  ProxyRequests off
  ProxyPass /api/websocket ws://localhost:8123/api/websocket disablereuse=on keepalive=on
  ProxyPassReverse /api/websocket ws://localhost:8123/api/websocket disablereuse=on
  ProxyPass / http://localhost:8123/ disablereuse=on keepalive=on
  ProxyPassReverse / http://localhost:8123/ disablereuse=on#`

  RewriteEngine on
  RewriteCond %{HTTP:Upgrade} =websocket [NC]
  RewriteRule /(.*)  ws://localhost:8123/$1 [P,L]
  RewriteCond %{HTTP:Upgrade} !=websocket [NC]
  RewriteRule /(.*)  http://localhost:8123/$1 [P,L]

SSLCertificateFile /etc/letsencrypt/live/app.home/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/app.home/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

cloud.home.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName cloud.home
    DocumentRoot "/var/www/cloud"

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/cloud/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/cloud.home.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/cloud.home.access.log combined

SSLCertificateFile /etc/letsencrypt/live/cloud.home/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/cloud.home/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

1 Ответ

0 голосов
/ 17 сентября 2018

Apache получает зашифрованное соединение через порт 443. Затем он согласовывает сертификат с браузером клиента.Но на этом этапе он не читает запрашиваемый домен.Сначала он должен согласовать сертификат для расшифровки полезной нагрузки.

Таким образом, Apache всегда будет использовать первый обнаруженный виртуальный хост, соответствующий порту 443. Он получает сертификат от этого.

Чтобы это исправить,вам необходимо:

  • настроить второй IP-адрес для вашего второго домена.Поэтому Apache будет настроен так, чтобы указать domain1 == IP1, domain2 == IP2.
  • Использовать другой порт для второго домена, например: 444.Но это не удобно, так как это не по умолчанию.
  • Использовать SNI.Проведите некоторое исследование по этому вопросу, слишком долго для объяснения здесь.
...