华为云 ECS 实践:用 Docker 部署 Nginx,让一个静态网站跑起来

举报
yd_291272928 发表于 2026/10/21 10:02:03 2026/10/21
【摘要】 华为云 ECS 实践:用 Docker 部署 Nginx,让一个静态网站跑起来把一个网页放到云服务器上,需要经过哪些步骤?本文以华为云弹性云服务器 ECS 为运行环境,通过 Docker 部署 Nginx,完成静态页面发布、健康接口验证和日志查看。整个示例围绕一条简单的访问链路展开:浏览器 → ECS 弹性公网 IP → 主机 80 端口 → Nginx 容器 → 静态页面先把这条链路跑通...

华为云 ECS 实践:用 Docker 部署 Nginx,让一个静态网站跑起来

把一个网页放到云服务器上,需要经过哪些步骤?

本文以华为云弹性云服务器 ECS 为运行环境,通过 Docker 部署 Nginx,完成静态页面发布、健康接口验证和日志查看。整个示例围绕一条简单的访问链路展开:

浏览器 → ECS 弹性公网 IP → 主机 80 端口 → Nginx 容器 → 静态页面

先把这条链路跑通,再逐步加入域名、HTTPS 和自动化发布,会更容易理解每一层的作用。

一、准备云服务器和访问规则

本文使用一台运行 Ubuntu 24.04 LTS 的 ECS,并假设已经安装 Docker,且当前用户具有 sudo 权限。未安装 Docker 的读者,需要先完成 Docker 安装,再继续本文操作。

为了通过公网访问,需要为 ECS 绑定弹性公网 IP,并在实例关联的安全组中添加相应的入方向规则。本示例使用以下规则:

用途 协议和端口 来源地址
SSH 管理 TCP 22 自己当前的公网 IP,使用 /32 掩码
网站访问 TCP 80 0.0.0.0/0

网站端口可以按公开访问的需要放通,SSH 则应限制来源。配置完成后,再继续后面的部署步骤。

后续命令均在登录 ECS 后的 Linux 终端执行。

二、把页面和配置放在主机上

先创建项目目录:

mkdir -p ~/cloud-web/html ~/cloud-web/conf.d
cd ~/cloud-web

创建一个简单的首页:

cat > html/index.html <<'EOF'
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>华为云 ECS 部署实践</title>
</head>
<body>
  <h1>Hello, Huawei Cloud!</h1>
  <p>这是一个通过 Docker 和 Nginx 发布的静态页面。</p>
</body>
</html>
EOF

接着创建 conf.d/default.conf:

cat > conf.d/default.conf <<'EOF'
server {
    listen 80;
    server_name _;

    charset utf-8;
    root /usr/share/nginx/html;
    index index.html;

    access_log /dev/stdout;
    error_log /dev/stderr warn;

    location / {
        try_files $uri $uri/ =404;
    }

    location = /healthz {
        default_type text/plain;
        return 200 "ok\n";
    }
}
EOF

这里有两个值得理解的配置点。

root 指定页面目录,try_files 则根据请求路径查找文件或目录,找不到时返回 404。这样可以明确处理不存在的资源。

/healthz 是本文专门设计的验证接口,固定返回 ok。它用于确认 Nginx 可以接收请求并执行对应配置;以后接入后端服务时,还需要单独验证后端的可用性。

三、启动 Nginx 容器

在 ~/cloud-web 目录下执行:

sudo docker run -d \
  --name cloud-web \
  --restart unless-stopped \
  -p 80:80 \
  --mount "type=bind,src=$PWD/html,dst=/usr/share/nginx/html,readonly" \
  --mount "type=bind,src=$PWD/conf.d,dst=/etc/nginx/conf.d,readonly" \
  nginx:stable

本文选用 Nginx 官方镜像的 stable 标签,通过挂载目录提供静态内容和自定义配置。

这条命令中的关键参数如下:

参数 作用
-d 让容器在后台运行
--name cloud-web 指定容器名称,方便后续管理
--restart unless-stopped 设置自动重启策略,手动停止的容器不属于自动恢复的情况
-p 80:80 将主机的 80 端口映射到容器的 80 端口
--mount 把主机目录绑定挂载到容器中
readonly 限制容器对挂载目录的写入

两个绑定挂载分别提供页面和配置。文件保存在 ECS 上,后续可以直接在项目目录中维护。

四、分别验证主机访问和公网访问

先在 ECS 上执行:

# 查看容器状态
sudo docker ps --filter name=cloud-web

# 检查 Nginx 配置
sudo docker exec cloud-web nginx -t

# 验证健康接口和首页
curl -i http://127.0.0.1/healthz
curl -i http://127.0.0.1/

配置正确时,健康接口应返回 HTTP 200,响应内容为 ok;首页请求应返回刚才创建的 HTML。

随后,在自己电脑的浏览器中访问:

http://你的ECS弹性公网IP/

这两次验证应当分开做。主机上的请求用于检查本机服务链路,公网请求还需要经过弹性公网 IP 和安全组等网络配置。建议先确认本机访问正常,再检查公网访问。

五、访问失败时,沿着请求链路排查

遇到问题,可以按“容器状态 → Nginx 配置 → 本机请求 → 公网请求”的顺序检查:

# 包括已经退出的容器
sudo docker ps -a --filter name=cloud-web

# 查看最近 50 行日志
sudo docker logs --tail 50 cloud-web

# 持续跟踪日志,按 Ctrl+C 结束跟踪
sudo docker logs -f cloud-web

结合本文的配置,可以这样缩小检查范围:

现象 优先检查
容器启动后退出 容器日志、Nginx 配置语法
首页返回 404 html/index.html 是否存在、挂载路径是否正确
健康接口正常,首页异常 页面文件及文件访问权限
本机访问正常,公网访问超时 弹性公网 IP、安全组、主机网络规则

这些是针对本示例的排查顺序。尤其是公网访问失败时,应核对实例关联的安全组和实例内部网络规则。

另一个容易忽略的细节是,Docker 发布端口与 UFW 等防火墙工具存在交互限制,不能仅凭 UFW 的显示结果判断容器端口是否暴露。

六、配置修改后,先检查再加载

后续修改 Nginx 配置,可以执行:

sudo docker exec cloud-web nginx -t &&
sudo docker exec cloud-web nginx -s reload

这里使用 &&,让配置检查通过后才执行重新加载。Nginx 支持通过 reload 加载新配置,并让旧工作进程逐步完成正在处理的请求。

七、后续可以做什么

本文示例可以作为后续练习的起点:为站点配置域名和 HTTPS,把页面文件纳入版本管理,再尝试自动化发布。

每增加一个环节,都保留本机请求、公网请求和日志这三个验证入口,部署过程就会更容易检查和维护。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。