我使用 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。