是否可以为AWS上的每个子域创建单独的cname记录

时间:2018-05-07 03:25:21

标签: amazon-web-services elastic-beanstalk amazon-route53

我想要www.example.comstaging.example.comdemo.example.com,其中每个映射到Elastic Beanstalk上相同应用程序的单独环境。

这可能吗?

在我example.com.的托管区域,我为www.example.comstaging.example.comdemo.example.com设置了cname记录,每个记录的值均指向其各自的EB网址

我设置www.example.com的第一个工作和请求到达环境。但是,当我尝试使用ping staging.example.com与其他人联系时,结果为ping: cannot resolve staging.example.com: Unknown host

  • 在Route 53上购买域名和区域
  • 在AWS证书管理员上发布的证书
  • 我在每个负载均衡器上以相同的方式设置证书
  • 第一个,www.example.com正常工作
  • 其他人不
  • 我不确定我在这里缺少什么,除非它不可能

这可能会起作用吗?

注意:我已将我的实际域名替换为example.com

更新1:

我可能会越来越近但它还没有工作,它正在返回You don't have permission to access /user

根据此链接,https://serverfault.com/questions/407961/setting-up-subdomains-within-amazon-aws-elastic-beanstalk

我补充说:

files:
  "/etc/httpd/conf.d/vhost.conf":
    mode: "000644"
    owner: root
    group: root
    encoding: plain
    content: |
      NameVirtualHost *:80

      <VirtualHost *:80>
        DocumentRoot "/var/app/current/"
         <Directory "/var/app/current/">
          Options Indexes FollowSymLinks MultiViews
          AllowOverride All
          Require all granted
         </Directory>
      </VirtualHost>

      <VirtualHost *:80>
       ServerName staging.example.com
       DocumentRoot "/var/app/current/your-new-webroot"
        <Directory "/var/app/current/your-new-webroot">
         Options Indexes FollowSymLinks MultiViews
         AllowOverride All
         Require all granted
        </Directory>
      </VirtualHost>

现在,当我运行ping staging.example.com时,响应为:

  

PING   例如... elasticbeanstalk.com   (35.182.128.147):56个数据字节

哪个好。但是,当我尝试提出我的实际要求时:

curl -X POST -H "Content-Type: application/json" 
-H "Authorization: Bearer ..." -d '{}' https://staging.example.com/user

回复是:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /user
on this server.<br />
</p>
</body></html>

更新2:

我重新排序了我的VirtualHosts并添加了ServerName,所以它现在看起来像这样:

files:
  "/etc/httpd/conf.d/vhost.conf":
    mode: "000644"
    owner: root
    group: root
    encoding: plain
    content: |
      NameVirtualHost *:80

      <VirtualHost *:80>
       ServerName staging.example.com
       DocumentRoot "/var/app/current/your-new-webroot"
        <Directory "/var/app/current/your-new-webroot">
         Options Indexes FollowSymLinks MultiViews
         AllowOverride All
         Require all granted
        </Directory>
      </VirtualHost>

      <VirtualHost *:80>
        ServerName www.example.com
        DocumentRoot "/var/app/current/"
         <Directory "/var/app/current/">
          Options Indexes FollowSymLinks MultiViews
          AllowOverride All
          Require all granted
         </Directory>
      </VirtualHost>

但我仍然从我的POST请求获得相同的回复:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /user
on this server.<br />
</p>
</body></html>

此外,根据我的/var/log/httpd/error_log日志:

AH01630: client denied by server configuration: /var/app

更新3:

几点。

  1. 更新了DirectoryDocumentRoot以指向我的应用文件实际存储在我的烧瓶应用的服务器上的位置,"/opt/python/current/app",之前我复制并粘贴了{{} 1}}。

  2. 使用"/var/app/current/"检查了我的apache版本。结果是,httpd -v

  3. 更新文件:

    Server version: Apache/2.4.27 (Amazon) \n Server built:   Sep 24 2017 23:19:50

    仍然得到相同的结果。

1 个答案:

答案 0 :(得分:1)

ping staging.example.com有效,因为您的CNAME已正确解析。但是,VirtualHost指令以线性方式应用。由于您的第一个VHost部分不包含ServerName,因此默认情况下会将其应用于所有请求。

更改两个VHost部分的顺序,或者向它们添加ServerName,事情应该开始工作(可能需要重新启动EB应用程序)。

如果还有其他原因导致403错误,您也可以检查机器本身的日志文件。