【问题标题】:How to host multiple domains and subdomains on single AWS EC2 instance如何在单个 AWS EC2 实例上托管多个域和子域
【发布时间】: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。只需添加一个子域。

标签: apache amazon-web-services amazon-ec2 httpd.conf amazon-route53


【解决方案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 的下拉列表中选择 CNAMEValue 中输入域名。

现在创建http.conf 文件并像我在问题中那样构建虚拟主机。

现在应该可以了 :)

【讨论】:

    【解决方案2】:

    这可以通过在 AWS-EC2 实例上安装 Apache HTTP Server 并按照建议为每个 DNS 或 Sub-DNS 配置 VirtualHost 来完成Amazonian

    为简洁起见,请阅读此thread 讨论、此官方exampletechrepublic 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 地址的原因。如果我没有正确考虑这个问题,请告诉我。
      猜你喜欢
      • 2017-05-09
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 2011-11-28
      • 2017-05-23
      • 2019-06-15
      • 2017-04-16
      相关资源
      最近更新 更多