亚马逊网络服务 AWS:如何托管 java 应用程序、分配自定义域、自定义域名无法正常工作
Amazon web services AWS: how to host java app, assign custom domain, custom domain name doesn't work properly
我在这里托管了一个站点:http://testapp-test.us-west-2.elasticbeanstalk.com/someservlet.do
该站点包含一个 index.jsp
和一个 someservlet
。
在https://my.freenom.com cabinet I tried: to set nameservers and to set url forwarding to http://testapp-test.us-west-2.elasticbeanstalk.com。
前者不起作用:我将名称服务器设置为屏幕显示,当尝试访问 codingrecords.tk 时它只是空白。
URL 转发但是有效,它确实显示主页,但是当我尝试访问 http://codingrecords.tk/someservlet.do 它仍然显示 index.jsp
消息。
我该如何解决?通过指定名称服务器,而不是 url 转发?但是后来也没用..
所以你只需要1个Public Route 53 zone for codingrecords.tk,那么你可以通过为给定的ELB创建ALIAS记录来为子域www创建一个Route 53资源记录集你通过 Elastic Beanstalk。
既然你确实为 www.codingrecords.tk 创建了一个 route 53 区域,我会删除那个 (www.codingrecords.tk),用下面的名称服务器创建一个 Delegation Name set,在为 codingrecords.tk 创建 Route 53 区域时使用该名称集。这样您就不需要在 Registar 更改 NS 记录。
dig @8.8.8.8 www.codingrecords.tk NS
; <<>> DiG 9.8.3-P1 <<>> @8.8.8.8 www.codingrecords.tk NS
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38463
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.codingrecords.tk. IN NS
;; ANSWER SECTION:
www.codingrecords.tk. 21599 IN NS ns-1363.awsdns-42.org.
www.codingrecords.tk. 21599 IN NS ns-2005.awsdns-58.co.uk.
www.codingrecords.tk. 21599 IN NS ns-62.awsdns-07.com.
www.codingrecords.tk. 21599 IN NS ns-657.awsdns-18.net.
;; Query time: 134 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Feb 18 18:05:38 2018
;; MSG SIZE rcvd: 177
codingrecords.tk
没有名称服务器
dig @8.8.8.8 NS codingrecords.tk
; <<>> DiG 9.8.3-P1 <<>> @8.8.8.8 NS codingrecords.tk
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 55760
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;codingrecords.tk. IN NS
;; Query time: 156 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Feb 18 18:15:39 2018
;; MSG SIZE rcvd: 34
只需将最后一条记录中的 Name 更改为 www.codingrecords.tk。应该让它工作。如果没有 - 请阅读下文,看看还有什么问题。
因为这是elastic beanstalk,你应该为它配置一个ELB。您需要做的就是为 www.codingrecords.tk 添加一条 A 记录,配置为您的 ELB 的别名。
如果您希望 http://codingrecords.tk 也能正常工作,您还需要为其添加一条 A 记录(也为您的 ELB 设置别名)。还要看P.S。以下。不确定它为什么对你有用——它不存在于你上面的配置中,当我从我的机器上尝试时它没有解决。很可能您的 /etc/hosts 或本地 DNS 或其他类似的东西中都有它。
我相信 CNAME 记录也应该有效。但我从未尝试过。对我来说,A 类型似乎是 Route 53 中更好的选择,因为您仍然可以将其配置为别名(从而剥夺 CNAME 的所有好处),但 AWS 仍将 return 一个实际的 IP 地址用于查询,在名称解析中为最终用户节省 round-trip。
P.S。我还相信您的 NS 和 SOA 记录是针对 codingrecords.tk,而不是针对 www.codingrecords.tk。虽然在您当前的配置中完全有效,但他们实际上是在说您拥有 www.codingrecords.tk(并且是 sub-domains),而不是 codingrecords.tk。我不认为这是你的意图。
好的,经过大量谷歌搜索和尝试后,我设法让它工作了。希望对以后的读者有所帮助。
我在 Internet 的自定义域中部署 java 应用程序所做的工作:
- 在freenom.com
中获取免费域名
创建密钥对(不知道有没有必要,以防万一):
2.1.转到 Amazon Web 服务 - 服务 - EC2 - 密钥对 - 创建密钥对
2.2 选一个key_name作为key,在电脑上保存一个文件
在 AWS 上创建应用程序和环境
3.1 转到Amazon Web Services - 服务 - Elastic Beanstalk - 创建新应用程序
3.2继续创建新的申请,除非强制填写一些东西,否则点击下一步;选择 tomcat 作为网络服务器;当来到一个有 Key 标签的表单时 - 选择一个现有的键,其中包含您之前分配给它的名称。
选择一个名称 - 下一步 - 创建 Web 服务器 - Select 平台 Tomcat - 下一步 - 上传你的 .war 文件 - 下一步- 如果您不需要数据库,请单击下一步 - 将 EC2 密钥对设置为 key_name - 下一步 - 不要对环境标签做任何事情 - 下一步 - 下一步 - 启动
3.3 您的申请已启动;您可以在 Elastic Beanstalk 仪表板看到它,您可以在 Services - EC2 - Instances:
看到 运行 环境
创建IP地址:
4.0 转到 服务 - EC2 - 实例 。检查 IPv4 Public IP 列。如果那里已经有一个地址,请转到第 5 点。如果它是空的,请转到 4.1。
4.1 转到 服务 - EC2 - 弹性 IP:
4.2 点击分配新地址:
4.3 选择它并单击 Actions - Associate Address - Select 你的应用实例 - Associate:
设置53号公路:
5.1 转到 服务 - Route 53:
5.2 转到托管区域:
5.3 单击创建托管区域:
5.4 将您的网站名称添加到右侧的表格中(例如,butterflies.com、somesite.edu,随便什么):
出现一个 table,其中包含您的托管区域的两个记录集:NS 和 SOA 记录集。
5.5 单击 NS 记录集并将名称服务器从 Value 复制粘贴到您的注册商设置中:
5.6 转到 服务 - Elastic Beanstalk,找到你的应用程序 - 复制 URL 值:
返回 Route 53,点击创建记录集。选择 Type: A, Alias: 是的,在 Alias 目标中粘贴 URL .单击创建:
5.7 单击创建记录集。设置名称:www.设置类型:CNAME。将值设置为your_site_name.your_domain(例如butterflies.com),单击创建:
- 完成!很有可能,your_site_name 正在工作。
我在这里托管了一个站点:http://testapp-test.us-west-2.elasticbeanstalk.com/someservlet.do
该站点包含一个 index.jsp
和一个 someservlet
。
在https://my.freenom.com cabinet I tried: to set nameservers and to set url forwarding to http://testapp-test.us-west-2.elasticbeanstalk.com。
前者不起作用:我将名称服务器设置为屏幕显示,当尝试访问 codingrecords.tk 时它只是空白。
URL 转发但是有效,它确实显示主页,但是当我尝试访问 http://codingrecords.tk/someservlet.do 它仍然显示 index.jsp
消息。
我该如何解决?通过指定名称服务器,而不是 url 转发?但是后来也没用..
所以你只需要1个Public Route 53 zone for codingrecords.tk,那么你可以通过为给定的ELB创建ALIAS记录来为子域www创建一个Route 53资源记录集你通过 Elastic Beanstalk。
既然你确实为 www.codingrecords.tk 创建了一个 route 53 区域,我会删除那个 (www.codingrecords.tk),用下面的名称服务器创建一个 Delegation Name set,在为 codingrecords.tk 创建 Route 53 区域时使用该名称集。这样您就不需要在 Registar 更改 NS 记录。
dig @8.8.8.8 www.codingrecords.tk NS
; <<>> DiG 9.8.3-P1 <<>> @8.8.8.8 www.codingrecords.tk NS
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38463
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.codingrecords.tk. IN NS
;; ANSWER SECTION:
www.codingrecords.tk. 21599 IN NS ns-1363.awsdns-42.org.
www.codingrecords.tk. 21599 IN NS ns-2005.awsdns-58.co.uk.
www.codingrecords.tk. 21599 IN NS ns-62.awsdns-07.com.
www.codingrecords.tk. 21599 IN NS ns-657.awsdns-18.net.
;; Query time: 134 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Feb 18 18:05:38 2018
;; MSG SIZE rcvd: 177
codingrecords.tk
没有名称服务器dig @8.8.8.8 NS codingrecords.tk
; <<>> DiG 9.8.3-P1 <<>> @8.8.8.8 NS codingrecords.tk
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 55760
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;codingrecords.tk. IN NS
;; Query time: 156 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Feb 18 18:15:39 2018
;; MSG SIZE rcvd: 34
只需将最后一条记录中的 Name 更改为 www.codingrecords.tk。应该让它工作。如果没有 - 请阅读下文,看看还有什么问题。
因为这是elastic beanstalk,你应该为它配置一个ELB。您需要做的就是为 www.codingrecords.tk 添加一条 A 记录,配置为您的 ELB 的别名。
如果您希望 http://codingrecords.tk 也能正常工作,您还需要为其添加一条 A 记录(也为您的 ELB 设置别名)。还要看P.S。以下。不确定它为什么对你有用——它不存在于你上面的配置中,当我从我的机器上尝试时它没有解决。很可能您的 /etc/hosts 或本地 DNS 或其他类似的东西中都有它。
我相信 CNAME 记录也应该有效。但我从未尝试过。对我来说,A 类型似乎是 Route 53 中更好的选择,因为您仍然可以将其配置为别名(从而剥夺 CNAME 的所有好处),但 AWS 仍将 return 一个实际的 IP 地址用于查询,在名称解析中为最终用户节省 round-trip。
P.S。我还相信您的 NS 和 SOA 记录是针对 codingrecords.tk,而不是针对 www.codingrecords.tk。虽然在您当前的配置中完全有效,但他们实际上是在说您拥有 www.codingrecords.tk(并且是 sub-domains),而不是 codingrecords.tk。我不认为这是你的意图。
好的,经过大量谷歌搜索和尝试后,我设法让它工作了。希望对以后的读者有所帮助。
我在 Internet 的自定义域中部署 java 应用程序所做的工作:
- 在freenom.com 中获取免费域名
创建密钥对(不知道有没有必要,以防万一):
2.1.转到 Amazon Web 服务 - 服务 - EC2 - 密钥对 - 创建密钥对2.2 选一个key_name作为key,在电脑上保存一个文件
在 AWS 上创建应用程序和环境
3.1 转到Amazon Web Services - 服务 - Elastic Beanstalk - 创建新应用程序
3.2继续创建新的申请,除非强制填写一些东西,否则点击下一步;选择 tomcat 作为网络服务器;当来到一个有 Key 标签的表单时 - 选择一个现有的键,其中包含您之前分配给它的名称。
选择一个名称 - 下一步 - 创建 Web 服务器 - Select 平台 Tomcat - 下一步 - 上传你的 .war 文件 - 下一步- 如果您不需要数据库,请单击下一步 - 将 EC2 密钥对设置为 key_name - 下一步 - 不要对环境标签做任何事情 - 下一步 - 下一步 - 启动
3.3 您的申请已启动;您可以在 Elastic Beanstalk 仪表板看到它,您可以在 Services - EC2 - Instances:
看到 运行 环境创建IP地址:
4.0 转到 服务 - EC2 - 实例 。检查 IPv4 Public IP 列。如果那里已经有一个地址,请转到第 5 点。如果它是空的,请转到 4.1。
4.1 转到 服务 - EC2 - 弹性 IP:
4.2 点击分配新地址:
4.3 选择它并单击 Actions - Associate Address - Select 你的应用实例 - Associate:
设置53号公路:
5.1 转到 服务 - Route 53:
5.2 转到托管区域:
5.3 单击创建托管区域:
5.4 将您的网站名称添加到右侧的表格中(例如,butterflies.com、somesite.edu,随便什么):
出现一个 table,其中包含您的托管区域的两个记录集:NS 和 SOA 记录集。
5.5 单击 NS 记录集并将名称服务器从 Value 复制粘贴到您的注册商设置中:
5.6 转到 服务 - Elastic Beanstalk,找到你的应用程序 - 复制 URL 值:
返回 Route 53,点击创建记录集。选择 Type: A, Alias: 是的,在 Alias 目标中粘贴 URL .单击创建:
5.7 单击创建记录集。设置名称:www.设置类型:CNAME。将值设置为your_site_name.your_domain(例如butterflies.com),单击创建:
- 完成!很有可能,your_site_name 正在工作。