当前位置:首页 > 技术 > 正文内容

AWS EC2 云服务器搭建可访问的网站

访客 技术 2026年5月22日 4

AWS 注册与准备

想要尝试亚马逊的免费云服务,首先需要注册一个 AWS 账户,并在注册过程中绑定一张信用卡用于身份验证。

创建虚拟机实例(AMI)

登录 AWS 管理控制台后,按照以下步骤创建一个 EC2 实例:

  1. 进入 EC2 服务面板,即 EC2 Dashboard(仪表盘)。
  2. 点击"创建实例"(Launch Instance)按钮。
  3. 在第一步选择 AMI(亚马逊机器映像)时,推荐选择标记为"免费"的 Amazon Linux AMI。
  4. 第二步选择实例类型,这里唯一符合免费条件的是 t2.micro
  5. 确认配置信息后启动实例。一个实例即代表一台独立的虚拟服务器。
  6. 在创建过程中,如果生成了新的密钥对(例如 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 服务器环境。

  1. 更新系统包:
    sudo yum update -y
  2. 安装 Apache、PHP 7.0 和 MySQL:
    sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd
  3. 启动 Apache 并设置为开机自启:
    sudo service httpd start
    sudo chkconfig httpd on
  4. 将当前用户 ec2-user 添加到 apache 组:
    sudo usermod -a -G apache ec2-user
    退出当前会话,重新 SSH 连接后检查用户组:
    groups
    # 应输出:ec2-user wheel apache
  5. 修改网站根目录 /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 测试页面。
  6. 配置 MySQL:
    sudo service mysqld start
    sudo mysql_secure_installation
    sudo chkconfig mysqld on
  7. 安装 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.gz
    现在可以通过 http://<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.crtexample.com.keychain.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.comhttp://www.example.comhttps://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 解析生效,你的网站就能通过自定义域名稳定访问了。

标签: AWSEC2

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。