Apache始终加载相同的虚拟主机

时间:2018-09-17 12:50:41

标签: apache virtualhost

我有以下虚拟主机。但是,使用https时,虚拟主机似乎总是解析为app.home,使其加载cloud.home的唯一方法是从虚拟主机中删除app.home。这使我相信它会忽略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 :(得分:0)

Apache在端口443上接收加密的连接。然后,它与客户端的浏览器协商证书。但目前,它尚未尚未读取请求的域。它必须首先协商证书才能解密有效负载。

因此Apache将始终使用它找到的与端口443匹配的第一个VirtualHost。它从该端口获取证书。

要解决此问题,您必须:

  • 为您的第二个域设置第二个IP。因此,Apache将配置为说domain1 == IP1,domain2 == IP2。
  • 为第二个域使用其他端口,例如:444。但这并不方便,因为它不是默认值。
  • 使用SNI。为此进行一些研究,时间太长,无法在此处进行说明。
相关问题