华为云 ECS 新手实践:从零部署一个静态网站
华为云 ECS 新手实践:从零部署一个静态网站
适合第一次使用华为云弹性云服务器 ECS 的读者。文章以 Ubuntu LTS 和 Nginx 为例,从登录服务器开始,完成安全组放行、网页部署、域名解析检查和 HTTPS 配置。
示例环境:华为云 ECS、Ubuntu 24.04 LTS、Nginx。其他 Ubuntu 版本的操作基本一致;控制台名称和套餐规格可能变化,实际购买时以华为云控制台为准。
整体链路
部署一个网站,本质上是在打通下面这条链路:
访客浏览器
-> 公网 IP 或域名
-> 华为云安全组
-> ECS 内的 Nginx
-> /var/www/demo-site 中的网页文件
任何一个环节没有配置好,最后都会表现为“网站打不开”。后面每一步都会给出一个可以单独验证的方法,避免所有问题堆到最后再排查。
准备工作
开始前准备以下内容:
- 一个已完成实名认证的华为云账号。购买中国大陆节点的服务时,实名认证尤其重要。
- 一台带弹性公网 IP EIP 的 Linux ECS。本文选择 Ubuntu LTS 镜像。
- 登录凭据,密钥对或密码任选一种。生产环境优先使用密钥对。
- 一个可选域名。只使用 EIP 也能先验证网站是否部署成功。
- 本地终端工具。Windows 可以使用 PowerShell,macOS 和 Linux 可以使用系统终端。
如果使用中国大陆节点绑定自己的域名,并公开提供互联网信息服务,应先完成 ICP 备案。可以直接使用华为云备案中心办理:
https://beian.huaweicloud.com/
备案是上线流程的一部分,不应把临时使用 IP 访问当成长期规避备案的方案。
第一步:准备 ECS 和公网 IP
在华为云控制台创建或选择 ECS 时,重点确认四项:
- 地域:选择离主要访问者较近、符合数据存放要求的区域。
- 镜像:选择控制台中可用的 Ubuntu LTS 镜像,本文以 Ubuntu 24.04 LTS 为示例。
- 网络:为 ECS 分配弹性公网 IP EIP。实例没有公网 IP 时,外网无法直接访问。
- 安全组:为实例绑定一个可以修改入方向规则的安全组。
创建完成后记录三个信息:
- ECS 的弹性公网 IP
- ECS 所在地域
- 实例绑定的安全组
规格不需要照搬固定套餐。静态站点的资源消耗通常较低,但应按页面大小、访问量和后续用途选择。购买前在控制台核对 CPU、内存、系统盘、带宽和计费方式,不要只看实例价格。
第二步:只放行必要端口
华为云默认安全组只确保安全组内实例互通,默认拒绝外部请求进入实例。因此,即使 Nginx 已经启动,只要没有添加正确的入方向规则,公网仍然无法访问网页。
进入 ECS 关联安全组的入方向规则页面,按实际需要添加:
| 端口 | 协议 | 来源 | 用途 |
|---|---|---|---|
| 22 | TCP | 自己的公网 IP /32 |
SSH 登录 |
| 80 | TCP | 需要使用网站的用户范围 | HTTP 访问和证书校验 |
| 443 | TCP | 需要使用网站的用户范围 | HTTPS 访问 |
公网网站通常需要允许互联网访问 80 和 443。SSH 的 22 端口没有必要向所有地址长期开放,优先限制为固定出口 IP。如果办公网络或家庭宽带的公网 IP 经常变化,可以临时更新来源地址,或者先通过受控网络访问管理端口。
不要为了尽快测试而添加“全部协议、全部端口、所有来源”的规则。数据库端口、缓存端口和管理端口也不应直接暴露到公网。
华为云官方文档对默认安全组有明确说明:
第三步:登录 Linux ECS
华为云 Linux ECS 的登录用户名为 root。使用密钥登录时,在本机执行:
ssh -i ./your-key.pem root@<ECS公网IP>
如果使用密码登录,则执行:
ssh root@<ECS公网IP>
也可以使用华为云控制台的 CloudShell 或 VNC 登录。第一次连接时,终端会询问是否信任主机指纹,核对提示后输入 yes。
登录成功后检查系统信息:
cat /etc/os-release
ip addr
如果 SSH 连接失败,先检查安全组是否放行了 22 端口,以及来源 IP 是否填写正确。不要把“换服务器”当成第一步,应先确认连接卡在哪一层。
第四步:安装并启动 Nginx
更新软件包索引并安装 Nginx:
apt update
apt install -y nginx
systemctl enable --now nginx
systemctl --no-pager --full status nginx
随后在服务器内部验证:
curl -I http://127.0.0.1
如果返回 HTTP/1.1 200 OK,说明 Nginx 已经在监听本机的 80 端口。此时再从自己的电脑访问 http://<ECS公网IP>。如果服务器内部能访问、外部不能访问,优先检查安全组。
Ubuntu 系统可能同时启用了 UFW 防火墙。查看状态:
ufw status
只有看到 Status: active 时才需要继续处理 UFW。若提示 ufw: command not found,说明系统没有安装 UFW,可以跳过这一部分。UFW 为 active 时,应先放行 SSH,再放行网站端口:
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
修改防火墙时不要先关闭 SSH 再测试,否则可能把自己锁在服务器外面。
第五步:部署网页文件
创建站点目录:
install -d -m 755 /var/www/demo-site
写入一个最小可用的首页:
cat >/var/www/demo-site/index.html <<'HTML'
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>华为云 ECS 部署成功</title>
<style>
body {
max-width: 720px;
margin: 80px auto;
padding: 0 24px;
font-family: system-ui, sans-serif;
line-height: 1.7;
}
code {
padding: 2px 6px;
background: #f2f3f5;
border-radius: 4px;
}
</style>
</head>
<body>
<h1>华为云 ECS 部署成功</h1>
<p>这个页面由 <code>/var/www/demo-site</code> 提供。</p>
<p>下一步可以替换为自己的静态网站文件。</p>
</body>
</html>
HTML
新建 Nginx 站点配置:
cat >/etc/nginx/sites-available/demo-site <<'NGINX'
server {
listen 80;
listen [::]:80;
server_name _;
root /var/www/demo-site;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
NGINX
启用站点,并在确认没有使用默认站点后移除默认站点的软链接:
ln -sfn /etc/nginx/sites-available/demo-site /etc/nginx/sites-enabled/demo-site
rm -f /etc/nginx/sites-enabled/default
nginx -t
systemctl reload nginx
nginx -t 必须返回 syntax is ok 和 test is successful,再执行 reload。以后每次修改配置,都应先测试,再重载。
最后检查文件和目录权限:
chown -R root:root /var/www/demo-site
find /var/www/demo-site -type d -exec chmod 755 {} \;
find /var/www/demo-site -type f -exec chmod 644 {} \;
再次访问 http://<ECS公网IP>。看到“华为云 ECS 部署成功”就说明 ECS、安全组和 Nginx 已经打通。
第六步:绑定域名并检查解析
如果只是测试,可以跳到下一节了解后续维护。需要正式发布时,再配置域名。
在域名 DNS 控制台添加 A 记录:
主机记录 记录类型 记录值
@ A <ECS公网IP>
www A <ECS公网IP>
如果使用中国大陆节点,先确认域名备案状态和允许解析的范围。DNS 记录生效后,在本地电脑检查解析结果:
nslookup example.com
确认返回值就是 ECS 的 EIP 后,再测试域名访问:
curl.exe -I http://example.com
DNS 修改可能受到原有 TTL 缓存影响,不要在刚刚保存记录后立刻认定配置失败。先确认解析结果,再排查 HTTP。
第七步:启用 HTTPS
Let’s Encrypt 可以免费签发 HTTPS 证书。以下命令适用于已经安装 Nginx 的 Ubuntu,并且域名已正确解析到 ECS:
apt install -y certbot python3-certbot-nginx
certbot --nginx -d example.com -d www.example.com --redirect
执行 Certbot 前,把站点配置中的 server_name _; 改为已经解析的域名,例如:
server_name example.com www.example.com;
然后执行 nginx -t 和 systemctl reload nginx。只有一个域名时,只保留该域名。这样 Certbot 能准确识别要启用 HTTPS 的站点。
命令执行过程中,按提示填写证书通知邮箱并确认条款。没有配置 www 记录时,只填写已经解析的主域名。
启用后检查:
curl -I https://example.com
systemctl list-timers | grep certbot
certbot renew --dry-run
最后一条命令用于验证自动续期流程,不会真的签发生产证书。自动续期失败通常与 DNS、80/443 端口或 Nginx 配置有关,应保留续期日志并定期检查。
如果站点要求使用企业证书或其他证书管理方式,也可以从华为云证书服务控制台申请、上传或下载证书,再按实际证书文件配置 Nginx。证书类型和计费方式以华为云控制台展示为准。
常见问题排查
公网 IP 打不开,但服务器内能访问
在服务器内执行:
ss -lntp | grep ':80'
curl -I http://127.0.0.1
如果两项都正常,重点检查安全组入方向是否对公网放行 80 端口,以及 UFW 是否处于 active 状态。
返回 403 Forbidden
通常是 Nginx 没有读取站点文件的权限。检查:
namei -l /var/www/demo-site/index.html
tail -n 100 /var/log/nginx/error.log
确认 /var、/var/www、站点目录和 index.html 的权限允许 Nginx 读取。
返回 404 Not Found
检查 Nginx 配置中的 root 是否指向真正存放文件的目录,并确认首页文件名是 index.html。修改后执行:
nginx -t
systemctl reload nginx
SSH 突然连不上
检查 22 端口规则是否被删除、来源 IP 是否发生变化,以及操作系统防火墙是否拦截 SSH。若安全组和 UFW 都无法远程修改,再通过控制台的 VNC 或 CloudShell 登录处理。
HTTPS 签发失败
依次确认:
- 域名的 A 记录已经指向当前 EIP。
- 安全组放行了 80 和 443。
- Nginx 可以正常提供 HTTP 页面。
- 没有其他 CDN、反向代理或旧 DNS 记录抢占域名流量。
上线前的安全检查
部署完成后至少完成下面几项:
- 将 SSH 来源限制为管理 IP,关闭无必要的公网管理端口。
- 使用密钥登录后,再考虑关闭密码登录;更改前保留一个可用的登录方式。
- 定期更新系统软件和 Nginx,更新后先执行
nginx -t。 - 只在服务器上保存必要的网站文件,不把密码、Token、私钥放到 Web 根目录。
- 为站点目录和 Nginx 配置保留备份。
- 监控 ECS、带宽和证书续期状态,避免网站因资源或证书过期中断。
备份示例:
tar -czf /root/demo-site-backup-$(date +%F).tar.gz /var/www/demo-site /etc/nginx
恢复前先解压到临时目录检查内容,不要直接覆盖线上配置。
关于停止和删除资源
测试结束后,按实际需要处理 ECS、云硬盘、EIP 和其他关联资源。停止 ECS 不一定等于停止全部计费,删除实例前应先核对云硬盘、公网 IP 和快照等资源的状态,并确认已保留必要数据。
如果只是暂停访问,可以优先关闭不必要的公网端口或停止 Web 服务;如果准备彻底清理,则先备份,再按资源依赖顺序删除。
总结
这次部署可以归纳为一条可验证的顺序:
- 确认 ECS 已分配公网 IP。
- 在安全组中只放行 SSH、80 和 443。
- 在服务器内确认 Nginx 能访问
127.0.0.1。 - 从外网确认 EIP 能访问网页。
- 绑定域名后,再申请和验证 HTTPS 证书。
这个顺序把网络、Web 服务和文件权限分开检查,比“页面打不开就反复重装环境”更容易定位问题。完成最小站点后,再逐步加入自己的内容、备份、监控和发布流程。
- 点赞
- 收藏
- 关注作者
评论(0)