如何在单个 AWS EC2 实例上托管多个域和子域
Posted
技术标签:
【中文标题】如何在单个 AWS EC2 实例上托管多个域和子域【英文标题】:How to host multiple domains and subdomains on single AWS EC2 instance 【发布时间】:2016-11-21 06:51:20 【问题描述】:我正在尝试在 AWS 中设置 2 个域(domain1.com 和 domain2.com)和几个子域(app.domain1.com),并在单个实例(Amazon Linux、php、mysql)上运行它们。
我在 AWS Route53 中设置了 3 个托管区域,配置如下。
托管区域 1: domain1.com A型 52.108.XX.YY
托管区域 2 domain2.com A型 52.108.XX.YY
托管区 3 app.domain1.com A型 52.108.XX.YY
另外,我在 VirtualHost 标签中的 http.conf 文件中添加了以下代码。
<VirtualHost *:80>
ServerName domain1.com
DocumentRoot "/var/www/html/domain1"
ErrorLog "logs/domain1-error_log"
CustomLog "logs/domain1-access_log" common
</VirtualHost>
<VirtualHost *:80>
ServerName domain2.com
DocumentRoot "/var/www/html/domain2"
ErrorLog "logs/domain2-error_log"
CustomLog "logs/domain2-access_log" common
</VirtualHost>
<VirtualHost *:80>
ServerName app.domain1.com
DocumentRoot "/var/www/html/app"
ErrorLog "logs/app.domain1-error_log"
CustomLog "logs/app.domain1-access_log" common
</VirtualHost>
但是,只有 domain1.com 和 domain2.com 得到解决。当我访问 app.domain1.com 时,它给了我一个“找不到服务器”的错误。请帮助如何设置子域 - 托管区域设置或 httpd.conf 是否有问题?
【问题讨论】:
您确定您的 app.domain1.com 解析为 52.108.XX.YY 尝试再次 ping。 能否提供三个域以便我检查问题? 你是对的,它没有解析到正确的 IP 地址。您认为我必须在 Dreamhost(注册商)上添加子域并为其提供 Hosted Zone 3 的 NS 吗? pradyotghate.com dev.pradyotghate.com 这就是为什么它没有解决添加 A 记录到 app.domain1.com 以指向 52.108.XX.YY 并且它将开始工作您的配置是正确的。您没有为此更改任何 NS。只需添加一个子域。 【参考方案1】:好的,经过大约 2 小时的阅读各种网站和修改后,我准备好了。以下是如何执行此操作。
基本上,每个域名的托管区域 (HZ) 不应超过 1 个,否则情况会很糟糕。如果您的域名超过 1 个 HZ,请删除为子域创建的一个。
每个 HZ 将有 4 条记录 -
默认创建以下两条记录。不要编辑/删除它们。NS - 这是名称服务器记录。如果 AWS Route53 不是您的注册商,请使用
ns-servernumber.awsdns-number.com.
和其他三个(共 4 个)记录来更改您的注册商的名称服务器。SOA - 保留此记录。不要碰这个。创建以下两个记录集(蓝色按钮)。A - 将 Name 留空。 类型选择
A-IPv4 address
。在 Value 中输入您的 Elastic Load Balancer 或 EC2 实例的 IP 地址。CNAME - 在 name 中添加 *(星号/通配符) > 场。从 Type 的下拉列表中选择CNAME
在 Value 中输入域名。
现在创建http.conf
文件并像我在问题中那样构建虚拟主机。
现在应该可以了 :)
【讨论】:
【参考方案2】:这可以通过在 AWS-EC2 实例上安装 Apache HTTP Server 并按照建议为每个 DNS 或 Sub-DNS 配置 VirtualHost 来完成Amazonian
为简洁起见,请阅读此thread 讨论、此官方example 和techrepublic post。
希望这有帮助!
【讨论】:
【参考方案3】:您可以按照此链接上的教程进行操作:http://brianshim.com/webtricks/host-multiple-sites-amazon-ec2/
根据链接,一个常见的错误是:
成功了吗?如果不是,这是一个可能的原因。可能有 另一个配置文件干扰这个。检查 /etc/httpd/conf.d 中的另一个 .conf 文件。通常你的主要 httpd.conf 将在此目录中包含另一个 .conf 文件。制作 确保它没有一些干扰的虚拟主机设置 和你的。
设置好配置后,你应该运行:
sudo service httpd restart
【讨论】:
感谢分享文章。阅读。但这似乎是 Route 53 之前的文章。它规定直接将域指向 IP 地址,这不是 AWS 推荐的做法,因为它在未来无法通过 Elastic Load Balancer 进行扩展。需要有关使用 Route 53 管理 NS 进行这项工作的指导。 没有其他虚拟主机设置文件。是否重启了 Apache。 @PradyotGhate 在您的问题中,您说您正在 Route53 中设置 A 记录以直接指向 IP 地址。所以这里使用 Route53 与使用任何其他 DNS 服务没有区别。您对 Route53 的评论“未来可通过弹性负载均衡器进行扩展”似乎与讨论无关。是的,您将来可以使用 Route53 别名将根域指向 ELB,但现在您只是使用 A 记录,就像在链接文章中引用的任何其他 DNS 服务(如 Godaddy)上一样。 正确,今天不相关。但我想保持该选项(添加 ELB 并将类型 A 指向 EBL 而不是 EC2 实例)打开。这就是为什么使用 Route53 而不是直接将域名解析为 IP 地址的原因。如果我没有正确考虑这个问题,请告诉我。以上是关于如何在单个 AWS EC2 实例上托管多个域和子域的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS 上托管多个网站 - Amazon Linux EC2
Route53 中的域将根指向外部主机,在 AWS 中保留子域
如何为 AWS EC2 上托管的 Parse 服务器获取 APP_ID 和 CLIENT_KEY