具有两个域的 VirtualHost 不起作用
VirtualHost with two domains doesn't work
我不能用 VirtualHost 配置两个域,因为,总是只显示一个域。我的意思是,如果我访问 domainB.com 会将我重定向到 domainA.com 并且 domainA.com 工作正常。我在其他主机上做了这个过程,比如:DigitalOcean 或我自己的本地主机,但在这个实例中我找不到问题。如果我禁用一个站点,另一个站点可以正常工作。
我有一个 google 实例,其中 Ubuntu 17.10 和 Apache2 具有两个域(虚拟主机)。我禁用了默认的虚拟主机。我的文件夹结构是 /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 -> 作品
我在 domainA.com 的端口 443 中只有一个 VirtualHost 配置。
我添加了一个配置 *:80 并重定向到 ssl 并且工作正常。像这样:
<VirtualHost *:80>
ServerAdmin webmaster@domainA.com
ServerName domainA.com
ServerAlias www.domainA.com
Redirect / https://www.domainA.com/
</VirtualHost>
感谢 Matt Raines 的评论。
我不能用 VirtualHost 配置两个域,因为,总是只显示一个域。我的意思是,如果我访问 domainB.com 会将我重定向到 domainA.com 并且 domainA.com 工作正常。我在其他主机上做了这个过程,比如:DigitalOcean 或我自己的本地主机,但在这个实例中我找不到问题。如果我禁用一个站点,另一个站点可以正常工作。
我有一个 google 实例,其中 Ubuntu 17.10 和 Apache2 具有两个域(虚拟主机)。我禁用了默认的虚拟主机。我的文件夹结构是 /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 -> 作品
我在 domainA.com 的端口 443 中只有一个 VirtualHost 配置。
我添加了一个配置 *:80 并重定向到 ssl 并且工作正常。像这样:
<VirtualHost *:80>
ServerAdmin webmaster@domainA.com
ServerName domainA.com
ServerAlias www.domainA.com
Redirect / https://www.domainA.com/
</VirtualHost>
感谢 Matt Raines 的评论。