在AWS EC2上托管Web应用程序

在AWS环境中托管Web应用程序有多种方式。您的Web应用程序可以是传统网站或API项目。以下两种类型都将称为"Web应用程序"(web app)。
简介
在AWS环境中托管Web应用程序有多种方式。您的Web应用程序可以是传统网站或API项目。以下两种类型都将称为"Web应用程序"(web app)。以下列出了我们可以在AWS中托管Web应用程序的一些方式:
- 在S3存储桶中托管Web应用程序
- 在ECS、EKS或Fargate容器中托管Web应用程序
- 使用Elastic Beanstalk托管Web应用程序
- 直接在EC2上托管Web应用程序
[!NOTE] 虽然选项1、2和3是AWS中托管内容的现代方法,但在本文中,我们面向那些在旧系统上工作过但希望以旧习惯迁移到AWS环境的人!我们的目标是快速介绍Route53、Application Load Balancer、Security Groups等与EC2的协作流程。
在本文中,我们将检查最后一个选项。 EC2可使用多种操作系统。我们将使用"Free Tier"(免费层)中可用的最低配置Linux。有关AWS Free Tier的更多信息,请点击此处。
Amazon EC2可直接用于托管Web应用程序。本文将逐步解释完成此任务所需的所有步骤。
背景知识
我们要做什么?
基本架构如下图所示:

图片-001:主系统视图
假设您的目标是在AWS EC2机器上托管您的网站。为了简化应用程序,将在AWS EC2上的Apache Web服务器上发布静态HTML页面。我们将使FTP能够访问Apache的默认
www文件夹。除了这些要求外,还将通过AWS Route53将域名定向到此Web应用程序。为了设计图片-001中显示的架构,我们将按照灰色圆圈内的编号顺序创建AWS元素。
假设我们的域名是
WELR.com,我们想在EC2上托管其运行元素。在AWS EC2上托管
WELR.com内容的所有步骤如下。步骤1:在AWS中创建安全组
此安全组将用于EC2。安全组可以被视为其所附加对象的防火墙。
如下所示设置所有入站(inbound)端口:
- 20-21(FTP)
- 1024-1048(FTP),可选
- 22(SSH)
- 80(HTTP)
- 8080(HTTP自定义),可选
- 443(HTTPS)
下图中的红色矩形对于显示通过相关安全组从ALB到EC2的流程很重要。

图片-002:SG-for-EC2-for-WELR的入站规则
步骤2:创建EC2实例
在AWS中创建EC2实例是一个简单的过程。下图右上角的Connect(连接)按钮将用于连接到EC2。

图片-003:EC2-for-WELR
将所有需求安装到EC2-for-WELR。
首先,您应该连接到EC2命令行。有多种方法可以执行此步骤,但最简单的是直接通过AWS Web控制台连接。

图片-004:连接到EC2-for-WELR
按下Connect按钮后,您将以
ec2-user的身份连接到EC2命令行。2.1- Apache安装
TEXT
> sudo s
> yum update -
> yum install -y httpd.x86_6
> systemctl start httpd.servic
> systemctl enable httpd.service
所有Web应用程序文件将位于Apache的默认Web文件夹中。
Apache的默认Web文件夹是
/var/www/html目录。2.2 - FTP安装
TEXT
> sudo su
> yum update -y
> yum install vsftpd
> sudo vi /etc/vsftpd/vsftpd.conf
您应该在FTP配置文件中进行如下所示的一些更改。
TEXT
# 取消以下所有行的#号注释
anonymous_enable=NO
#
local_enable=YES
#
write_enable=YES
#
local_umask=022
#
dirmessage_enable=YES
#
xferlog_enable=YES
#
connect_from_port_20=YES
#
chroot_local_user=YES
write_enable=YES
allow_writeable_chroot=YES
#
listen=NO
#
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_address=18.170.116.xxx
可以使用以下命令之一重启
vsftpd服务:TEXT
> /etc/init.d/vsftpd restart
或者:
TEXT
> systemctl restart vsftpd
在EC2命令行中执行以下操作为FTP添加用户:
TEXT
> adduser awsftpuse
> passwd awsftpuse
> usermod -a -G root awsftpuser
> usermod -d /var/www/html/ awsftpuse
> chown -R awsftpuser /var/www/htm
> systemctl restart vsftpd
2.3 - FTP客户端安装
例如,Windows上的Filezilla客户端。
在AWS中创建所有元素后,尝试使用FTP客户端连接并上传文件。您应该能够将
index.html文件上传到EC2上的FTP Web文件夹。步骤3:为ALB创建安全组
如下所示设置所有入站(inbound)端口:
- 20-21(FTP)
- 1024-1048(FTP),可选
- 22(SSH)
- 80(HTTP)
- 8080(HTTP自定义),可选
- 443(HTTPS)

图片-005:SG-for-ALB-for-WELR的入站规则
步骤4:创建Target Group

图片-006:Target Group TG-for-WELR
步骤5:创建Application Load Balancer
此ALB应包含
TG-for-WELR目标组。目标组(Target group)是一组EC2。但目前只包含
EC2-for-WELR实例。此外,此ALB应包含
SG-for-ALB-for-WELR安全组。图片-007:Application Load Balancer ALB-for-WELR

步骤6:安全组之间的权限
向
SG-for-EC2-for-WELR添加入站规则,以接受来自SG-for-ALB-for-WELR的所有TCP请求。
图片-008:允许通过安全组从ALB到EC2的流程
步骤7:创建Route53托管区域
应该有如下四条记录:
- NS和SOA会自动创建
- 创建Record A。如下图所示
- 创建Record CNAME - 用于
welr.com
图片-009 - Route53记录

NS地址可在域名管理界面中使用,将域名指向您在EC2 Apache上托管的Web应用程序。
结论
如本文开头所述,在任何云环境中托管Web应用程序都有多种方式。我们在AWS EC2上进行了一些研究。如您所见,我们假设通过FTP手动将Web应用程序的运行元素部署到Apache。但是,可以使用任何CI/CD工具通过FTP命令自动执行此过程。
本文的主要目的是展示如何在Route53和负载均衡器后面的EC2上在AWS环境中托管Web应用程序。
我们学到的内容:
- 创建和配置EC2实例
- Apache Web服务器安装
- FTP配置和添加用户
- Security Group设置
- Application Load Balancer设置
- 使用Route53进行域名定向