华为云 ECS (Ubuntu 22.04) 使用 Docker 与 Nginx 快速部署静态服务及反向代理实战
前言
在日常开发与测试中,将前端静态项目或轻量级 Web 服务快速上线是高频需求。相比传统直接在宿主机编译安装各类运行环境,采用 Docker 容器化部署 + Nginx 反向代理 的架构,不仅能保持华为云弹性云服务器(ECS)宿主机环境的干净整洁,还能实现多服务的端口隔离与快速迁移。
本文将基于华为云 Ubuntu 22.04 LTS 实例,完整演示从环境初始化、容器启动到 Nginx 反向代理配置的实战步骤。
一、 环境准备与安全组配置
1. 服务器基础配置
- 云服务商:华为云弹性云服务器 ECS(或 Flexus 应用服务器 L 实例)
- 操作系统:Ubuntu 22.04 64位
- 网络要求:已绑定弹性公网 IP(EIP)
2. 配置华为云安全组
在开始部署前,需确保华为云控制台的安全组入方向规则已放行 Web 访问所需的端口:
- 登录华为云控制台,进入 弹性云服务器 ECS 页面。
- 点击实例名称进入详情页,切换到 安全组 标签页,点击 配置规则。
- 在 入方向规则 中点击 添加规则,放行以下端口:
TCP: 80(HTTP 默认端口)TCP: 443(HTTPS 默认端口)
二、 安装 Docker 与基础工具
通过 SSH 登录服务器终端,首先更新 APT 软件包索引并安装必要的系统工具:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget vim git ca-certificates gnupg lsb-release
接着安装 Docker 引擎并启动服务:
# 安装 Docker 官方包
sudo apt install -y docker.io docker-compose
# 设置开机自启并立即启动 Docker
sudo systemctl enable --now docker
# 验证安装结果
docker --version
当终端正常输出 Docker 版本号(如 Docker version 24.0.x)时,说明容器环境已就绪。
三、 使用 Docker 启动后端 Web 容器
为了演示容器隔离效果,我们在宿主机创建一个存放站点静态资源的目录,并启动一个运行在本地 8080 端口的容器(仅监听本地回环地址 127.0.0.1,不直接暴露到公网,由宿主机统一代理):
# 1. 创建项目工作目录与测试页面
mkdir -p /opt/web-demo/html
cat << 'EOF' > /opt/web-demo/html/index.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>华为云 ECS 部署测试</title>
<style>
body { font-family: sans-serif; text-align: center; padding-top: 100px; background: #f5f7fa; }
.card { display: inline-block; background: #fff; padding: 30px 50px; border-radius: 8px; box-shadow: 0 2px 12px rgba(0,0,0,0.08); }
h1 { color: #e60012; }
</style>
</head>
<body>
<div class="card">
<h1>Hello, Huawei Cloud!</h1>
<p>基于 Ubuntu 22.04 + Docker + Nginx 反向代理部署成功。</p>
</div>
</body>
</html>
EOF
# 2. 启动轻量容器并挂载静态目录
docker run -d \
--name web-demo \
--restart always \
-p 127.0.0.1:8080:80 \
-v /opt/web-demo/html:/usr/share/nginx/html:ro \
nginx:alpine
执行完成后,可通过 curl -I http://127.0.0.1:8080 测试本地容器响应,返回 HTTP/1.1 200 OK 即表示容器运行正常。
四、 配置宿主机 Nginx 反向代理
接下来在宿主机安装 Nginx,负责监听公网 80 端口并将流量转发给内部的 Docker 容器。
1. 安装宿主机 Nginx
sudo apt install -y nginx
sudo systemctl enable --now nginx
2. 编写反向代理配置文件
新建一个站点配置文件 /etc/nginx/conf.d/web-demo.conf:
sudo tee /etc/nginx/conf.d/web-demo.conf << 'EOF'
server {
listen 80;
server_name _; # 如有已备案域名,可在此替换为实际域名
# 访问日志与错误日志路径
access_log /var/log/nginx/web_demo_access.log;
error_log /var/log/nginx/web_demo_error.log;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
EOF
3. 移除默认站点冲突并重载配置
Ubuntu 下的 Nginx 默认启用了 /etc/nginx/sites-enabled/default,可能会拦截 80 端口的默认请求。我们可以将其移除并重新加载 Nginx:
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
当 sudo nginx -t 提示 syntax is ok 及 test is successful 时,配置即正式生效。
五、 常用排错与运维命令小结
在后续日常运维中,掌握以下几条命令可以快速定位服务状态:
- 查看容器实时运行状态与资源占用:
docker stats --no-stream - 查看容器最近 100 行日志:
docker logs --tail 100 web-demo - 排查端口监听情况:
ss -tulpn | grep -E '80|8080'
总结
通过“宿主机 Nginx 统一网关 + 本地回环端口绑定 Docker 容器”的模式,我们不仅避免了将容器端口直接暴露在公网上的安全隐患,还能在单台华为云 ECS 实例上轻松扩展多个不同的业务站点。后续如需升级 HTTPS,只需在宿主机 Nginx 层统一配置 SSL 证书即可。
- 点赞
- 收藏
- 关注作者
评论(0)