AWS EC2 云服务器搭建可访问的网站
AWS 注册与准备
想要尝试亚马逊的免费云服务,首先需要注册一个 AWS 账户,并在注册过程中绑定一张信用卡用于身份验证。
创建虚拟机实例(AMI)
登录 AWS 管理控制台后,按照以下步骤创建一个 EC2 实例:
- 进入 EC2 服务面板,即 EC2 Dashboard(仪表盘)。
- 点击"创建实例"(Launch Instance)按钮。
- 在第一步选择 AMI(亚马逊机器映像)时,推荐选择标记为"免费"的 Amazon Linux AMI。
- 第二步选择实例类型,这里唯一符合免费条件的是
t2.micro。 - 确认配置信息后启动实例。一个实例即代表一台独立的虚拟服务器。
- 在创建过程中,如果生成了新的密钥对(例如
xxx),请务必下载对应的私钥文件(xxx.pem)并妥善保管。一旦丢失,将无法再连接该服务器。
EC2 管理面板功能
在 EC2 管理控制台中,你可以查看并操作以下关键资源:
- Instances(实例):可对实例执行启动、停止或终止操作。注意:终止后的实例无法重新启动,默认会被自动删除。
- AMIs(映像):快照可用于制作映像,而映像则能用于备份当前实例。
- Volumes(卷):实例在物理层面存储在卷上。
- Snapshots(快照):为实例创建快照,用于数据备份。
- Key Pairs(密钥对):在这里管理连接实例所需的密钥。
- Security Groups(安全组):配置入站规则。初始默认只开放 SSH(端口22)访问,你需要手动添加 HTTP(端口80)和 HTTPS(端口443)规则,以便网站正常运行。
连接到 EC2 实例
在实例列表中,重点关注以下信息:
- Public DNS (IPv4):例如
ec2-xx-xx-xx-xx.compute-1.amazonaws.com,它包含了 IP 和区域信息。 - IPv4 Public IP:例如
xx.xxx.xxx.xx。 - Key Name:创建实例时绑定的密钥对名称。
- Security Groups:点击可查看或修改当前安全组。
选择运行中的实例,点击"连接"获取 SSH 命令。典型的连接命令如下:
ssh -i "xxx.pem" ec2-user@ec2-xx-xx-xx-xx.compute-1.amazonaws.com
成功执行后,本地终端即可远程操控该服务器。
搭建 LAMP 环境
连接上实例后,执行以下命令搭建 Web 服务器环境。
- 更新系统包:
sudo yum update -y - 安装 Apache、PHP 7.0 和 MySQL:
sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd - 启动 Apache 并设置为开机自启:
sudo service httpd start sudo chkconfig httpd on - 将当前用户
ec2-user添加到apache组:
退出当前会话,重新 SSH 连接后检查用户组:sudo usermod -a -G apache ec2-usergroups # 应输出:ec2-user wheel apache - 修改网站根目录
/var/www的权限:
此时访问sudo chown -R ec2-user:apache /var/www sudo chmod 2775 /var/www find /var/www -type d -exec sudo chmod 2775 {} \; find /var/www -type f -exec sudo chmod 0664 {} \;http://<Public DNS>/,应能看到 Apache 测试页面。 - 配置 MySQL:
sudo service mysqld start sudo mysql_secure_installation sudo chkconfig mysqld on - 安装 phpMyAdmin:
现在可以通过sudo yum install php70-mbstring.x86_64 php70-zip.x86_64 -y sudo service httpd restart cd /var/www/html wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1 rm phpMyAdmin-latest-all-languages.tar.gzhttp://<Public DNS>/phpMyAdmin管理数据库。
使用 FileZilla 传输文件
你也可以使用 FileZilla 等工具通过 SFTP 上传/下载文件。连接配置如下:
- 协议:SFTP
- 主机:
<Public DNS> - 端口:留空(默认22)
- 用户名:
ec2-user - 密钥文件:选择
xxx.pem
默认网站文件的存储路径为 /var/www/html。
配置 SSL 证书(免费)
默认的 HTTP 协议(端口80)是不安全的。要启用 HTTPS(端口443),需要配置 SSL/TLS 证书。这里推荐使用 Let's Encrypt 提供的免费证书。
注意:你需要拥有自己的域名。AWS 提供的 *.amazonaws.com 域名在 Let's Encrypt 的黑名单中,无法使用。
安装 getssl
curl --silent https://raw.githubusercontent.com/srvrco/getssl/master/getssl > getssl
chmod 700 getssl
初始化配置
假设你的域名是 example.com,别名为 www.example.com:
./getssl -c example.com
编辑全局配置文件 /home/ec2-user/.getssl/getssl.cfg:
CA="https://acme-v02.api.letsencrypt.org"
编辑域名配置文件 /home/ec2-user/.getssl/example.com/getssl.cfg:
CA="https://acme-v02.api.letsencrypt.org"
ACL=('/var/www/html/.well-known/acme-challenge')
USE_SINGLE_ACL="true"
新建用于验证的文件目录:
sudo mkdir -p /var/www/html/.well-known/acme-challenge
获取证书
sudo ./getssl example.com
证书文件将保存在 /home/ec2-user/.getssl/example.com/ 目录下,包括 example.com.crt、example.com.key、chain.crt 等。
配置 Apache 启用 HTTPS 并重定向
编辑 /etc/httpd/conf/httpd.conf,在 Listen 80 之后添加虚拟主机配置,实现 HTTP 到 HTTPS 的重定向。以下配置将 example.com 重定向到 https://www.example.com/:
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerAlias example.com
Redirect permanent / https://www.example.com/
</VirtualHost>
编辑 /etc/httpd/conf.d/ssl.conf,配置 SSL 证书并处理域名重定向:
SSLCertificateFile /home/ec2-user/.getssl/example.com/example.com.crt
SSLCertificateKeyFile /home/ec2-user/.getssl/example.com/example.com.key
SSLCertificateChainFile /home/ec2-user/.getssl/example.com/chain.crt
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
最后重启 Apache:
sudo service httpd restart
现在,所有对 http://example.com、http://www.example.com、https://example.com 的访问都会统一重定向到 https://www.example.com/。
获取免费域名
由于 EC2 实例的 IP 地址在重启后会变化,建议绑定一个固定域名。你可以从 Freenom 获取免费的顶级域名(如 .tk、.ml、.ga 等)。
购买(0美元)后,在域名管理页面进行 DNS 配置:
- 将域名解析到 EC2 的 公网 IP(A 记录):
Type: A, Target: <Your Public IP>, Name: 留空
或添加www子域名:Type: A, Target: <Your Public IP>, Name: www - 或者,解析到 公网 DNS(CNAME 记录):
Type: CNAME, Target: <Your Public DNS>, Name: 留空
同样可添加www子域名。
配置完成后,等待 DNS 解析生效,你的网站就能通过自定义域名稳定访问了。