Apache 虚拟主机为连接到服务器的两个域之一提供错误的 index.html 文件

Apache 虚拟主机为连接到服务器的两个域之一提供错误的 index.html 文件

我使用 Apache 虚拟主机在一台服务器上设置了两个域。第一个域 (domainA.com) 正在加载第二个域 (domainB.com) 的 index.html 文件,尽管第一个域 (domainA.com) 在文档根目录中有一个 index.html 文件。

虚拟主机文件看起来设置正确,创建它们后我运行了以下命令:

  • sudo a2ensite domainA.com
  • sudo a2ensite domainB.com
  • sudo a2dissite 000-default.conf
  • sudo apache2ctl configtest
  • sudo systemctl reload apache2
  • sudo systemctl restart apache2

域名A虚拟主机文件

<VirtualHost *:80>
  ServerName www.domainA.com
  ServerAlias domainA.com *.domainA.com
  ServerAdmin [email protected]
  DocumentRoot /var/www/domainA.com

<Directory /var/www/domainA.com>
  DirectoryIndex index.html index.php
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
</Directory>

  ErrorLog ${APACHE_LOG_DIR}/domainA.com_error.log
  CustomLog ${APACHE_LOG_DIR}/domainA.com_access.log combined
</VirtualHost>

B域虚拟主机文件

<VirtualHost *:80>
  ServerName www.domainB.ca
  ServerAlias domainB.ca *.domainB.ca
  ServerAdmin [email protected]
  DocumentRoot /var/www/domainB.ca

<Directory /var/www/domainB.ca>
  DirectoryIndex index.html index.php
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
</Directory>

  ErrorLog ${APACHE_LOG_DIR}/domainB.ca_error.log
  CustomLog ${APACHE_LOG_DIR}/domainB.ca_access.log combined
  
  # Added when creating Let's Encrypt SSL for domain using certbot 
  RewriteEngine on
  RewriteCond %{SERVER_NAME} =domainB.ca [OR]
  RewriteCond %{SERVER_NAME} =www.domainB.ca
  RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

输出自sudo apache2ctl -S

VirtualHost configuration:
  *:443 domainB.ca (/etc/apache2/sites-enabled/domainB.ca-le-ssl.conf:2)
  *:80 is a NameVirtualHost
    default server www.domainB.ca (/etc/apache2/sites-enabled/domainB.ca.conf:1)
    port 80 namevhost www.domainB.ca (/etc/apache2/sites-enabled/domainB.ca.conf:1)
    alias domainB.ca
    wild alias *.domainB.ca
    port 80 namevhost www.domainA.com (/etc/apache2/sites-enabled/domainA.com.conf:1)
    alias domainA.com
    wild alias *.domainA.com
    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 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

每个域名都使用 Cloudflare 作为 DNS,其中 @ 和 www 的 A 记录指向 Digital Ocean 上的相同 IP 地址。

两个域上均未实现 .htaccess 文件。

我在 Digital Ocean 和 Cloudflare 上使用相同的服务器和 DNS 配置进行了类似的多域设置,它们确实有效,所以我不知道为什么这样做不行。

答案1

从命令的输出来看apache2ctl -S,您似乎已经为两个域的端口 80 定义了 VirtualHosts,但仅为域 B 定义了端口 443。

列出的配置文件:

  • 域名B.ca-le-ssl.conf
  • 域名B.ca.conf
  • 域名A.com.conf

您还需要为域A定义一个带有SSL的VirtualHost。

相关内容