我在 AWS EC2 实例上运行了一个 Apache 服务器。目前,服务器上有一个虚拟主机正在成功运行,我想添加第二个虚拟主机/域,但我不知道如何让它运行。
匿名化数据,下面是我httpd.conf
为运行第一个虚拟主机而添加的原始信息:
<Directory "/var/www/site-1/public">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<VirtualHost *:80>
DocumentRoot "/var/www/site-1/public"
ServerName "site-1.com"
ServerAlias "*.site-1.com"
RewriteEngine on
RewriteCond %{SERVER_NAME} =site-1.com [OR]
RewriteCond %{SERVER_NAME} =*.site-1.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
然后我在 Google Domains 中注册了以下内容site-1
(使用虚假的 IP 地址):
Host name Type TTL Data
site-1.com A 1 hour 4.184.56.145
*.site-1.com A 1 hour 4.184.56.145
httpd.conf
然后,我使用 Certbot 添加了一个 SSL 证书,它在 Google Domains DNS 设置中添加了以下行和 ACME 质询:
Include /etc/httpd/conf/httpd-le-ssl.conf
一切运行正常。然后我购买了第二个域名(site-2.com
),现在,我只是想使用index.html
站点目录根目录中的一个非常简单的文件(即/var/www/site-2
)来运行虚拟主机。
为此,我在的最底部添加了以下内容httpd.conf
:
<Directory "/var/www/site-2">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<VirtualHost *:80>
DocumentRoot "/var/www/site-2"
ServerName "site-2.com"
</VirtualHost>
并且已将以下 DNS 设置添加到 Google Domains 中site-2
:
Host name Type TTL Data
site-2.com A 1 hour 4.184.56.145
自从为 添加了所有这些设置以来已经过去了几个小时site-2
,并且我用 重新启动了 Apache 服务器几次sudo systemctl restart httpd
。但是,当我转到 时site-2.com
,我得到了以下页面,它不是index.html
我放在 下的示例文件/var/www/site-2
:
还值得注意的是, 的图标site-2
实际上是 的图标site-1
。不知道为什么。此外, 的目录/文件权限/所有权site-2
与 的相同site-1
。
有人能提供一些关于为什么这不起作用的想法吗?不管怎样,在做了大量研究之后,我认为我必须将以下行添加到httpd.conf
,但这样做并重新启动服务器并没有什么区别:
NameVirtualHost *:80
编辑:我刚刚想通了。无论出于什么原因,site-2
都指向var/www/html
目录。如果我将示例index.html
文件放入该目录,那么当我访问 site-2.com 时,它会正确加载。这是为什么?为什么以下虚拟主机块不起作用?
<VirtualHost *:80>
DocumentRoot "/var/www/site-2"
ServerName "site-2.com"
</VirtualHost>
答案1
说实话,我不知道是怎么回事,但它刚刚开始工作。也许是 DNS 传播问题(不确定),但我在原始问题中列出的配置开始工作了。