【问题标题】:VirtualHost with two domains doesn't work具有两个域的 VirtualHost 不起作用
【发布时间】:2019-12-10 02:34:45
【问题描述】:

我不能用 VirtualHost 配置两个域,因为总是只显示一个域。我的意思是,如果我访问 domainB.com 将我重定向到 domainA.com 并且 domainA.com 工作正常。我在其他主机中进行了此过程,例如:DigitalOcean 或我自己的本地主机,但在此实例中我找不到问题。如果我禁用一个站点,其他站点就可以正常工作。

我有一个带有 Ubuntu 17.10 和 Apache2 的 google 实例,带有两个域(虚拟主机)。我禁用了默认虚拟主机。我的文件夹结构是 /var/www/domainA/ 和 /var/www/domainB/

Cloud DNS 配置了两个区域 domainA.com 和 domainB.com,其中 A 和 CNAME 记录指向我的服务器 IP。我也有指向 googledomains.com 的 NS 记录,并在我的注册器中添加了这些 DNS。

如果我对两个域都执行 ping 操作,它们会正确解析到我的 IP 地址而不会出现问题。

我在 sites-available 中配置了两个域:

#in /etc/apache/sites-available/domainA.com.conf
<VirtualHost *:443>
        ServerAdmin webmaster@domainA.com
        ServerName domainA.com
        ServerAlias www.domainA.com
        DocumentRoot /var/www/domainA

        ErrorLog ${APACHE_LOG_DIR}/error-domainA.log
        CustomLog ${APACHE_LOG_DIR}/access-domainA.log combined

        SSLEngine on
        SSLCertificateFile /etc/apache2/sslcert/certified-number.crt
        SSLCertificateKeyFile /etc/apache2/sslcert/domainA.com.key
        SSLCertificateChainFile /etc/apache2/sslcert/gd_bundle-g2-g1.crt

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /var/www/domainA/>
            Options FollowSymLinks
            AllowOverride All
        </Directory>

        <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
        </Directory>
</VirtualHost>

#in /etc/apache/sites-available/domainB.com.conf
<VirtualHost *:80>
        ServerAdmin webmaster@domainB.com
        ServerName domainB.com
        ServerAlias www.domainB.com
        DocumentRoot /var/www/domainB

        ErrorLog ${APACHE_LOG_DIR}/error-domainB.log
        CustomLog ${APACHE_LOG_DIR}/access-domainB.log combined

        <Directory /var/www/domainB/>
                Options FollowSymLinks
                AllowOverride All
        </Directory>
</VirtualHost>

apachectl -S 命令的结果:

sudo apache2ctl -S

VirtualHost configuration:
*:80                   domainB.com (/etc/apache2/sites-enabled/domainB.conf:1)
*:443                  domainA.com (/etc/apache2/sites-enabled/domainA.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex rewrite-map: using_defaults
Mutex ssl-stapling-refresh: using_defaults
Mutex ssl-stapling: 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
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

我必须检查哪些其他设置?

更新信息:如果我尝试使用 www 作为域 A,效果很好。

  • www.domainA.com -> 作品
  • domainA.com -> 不起作用,重定向到 domainB.com
  • www.domainB.com -> 作品
  • domainB.com -> 作品

【问题讨论】:

  • 您需要通过 http 和 https 访问 domainA.com 吗?在这种情况下,除了端口 443 上的虚拟主机之外,您还需要为 domainA.com 添加一个单独的虚拟主机,该虚拟主机在端口 80 上侦听。它可能应该重定向到 https 主机。这两个端口具有完全独立的 VirtualHost 列表。
  • 谢谢@MattRaines。我添加了你描述的设置,它工作正常。

标签: apache ubuntu google-cloud-platform virtualhost google-cloud-dns


【解决方案1】:

我在 domainA.com 的端口 443 中只有一个 VirtualHost 配置。

我添加了一个带有重定向到 ssl 的配置 *:80 并且可以正常工作。像这样:

<VirtualHost *:80>
        ServerAdmin webmaster@domainA.com
        ServerName domainA.com
        ServerAlias www.domainA.com
        Redirect / https://www.domainA.com/
</VirtualHost>

感谢Matt Raines 的评论。

【讨论】:

    猜你喜欢
    • 2019-04-04
    • 2016-11-19
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 2014-07-17
    • 2013-06-05
    相关资源
    最近更新 更多