跳到主要内容

第 16 课:用宝塔 Nginx 和域名接入真实项目

第五阶段 · 正式生产环境 · 面向 Docker 初学者

本课完成标准​

你能够解释域名、Nginx、反向代理和端口;把域名 A 记录指向 ECS;在宝塔配置反向代理;通过域名访问 student-management-api;排查 404、502、DNS 和端口问题;让 FastAPI 的 8000 端口不直接暴露公网。

1. 请求链路​

名词小白理解本项目角色
域名方便记忆的地址,如 api.example.com浏览器入口
Nginx站在门口的“前台”接收 80 并转交 FastAPI
反向代理前台替内部服务接待请求转发到 8000
FastAPI处理业务的“后厨”返回页面、接口和静态资源

请求链路:浏览器 → 域名 → 宝塔 Nginx(80)→ FastAPI 容器(127.0.0.1:8000)。

关键原则:用户只访问 80;Nginx 在服务器内部访问 8000,不让陌生人直接访问 FastAPI。

2. 准备域名​

以下用 api.example.com 作示例,请替换成自己的域名。

  1. 在阿里云 DNS 添加 A 记录。
  2. 主机记录填写 api,记录值填写 ECS 公网 IP。
  3. 等待 DNS 生效。
nslookup api.example.com

结果出现 ECS 公网 IP,说明解析方向正确。参考阿里云 DNS 添加记录。

不要把域名写成容器名:域名解析到服务器公网 IP;Nginx 到 FastAPI 的目标才是 127.0.0.1:8000。

3. 在宝塔添加反向代理​

  1. 宝塔 → 网站 → 添加站点,域名填写 api.example.com。
  2. PHP 版本选择“纯静态”或按面板提示创建。
  3. 进入网站 设置 → 反向代理,新增代理。
  4. 代理名称填写 student-api,目标 URL 填 http://127.0.0.1:8000。
  5. 保存并重载 Nginx。

宝塔是在帮你生成 Nginx 配置。可参考 Nginx 官方 proxy 文档。

4. 确认 Docker 只监听本机​

cd /www/wwwroot/student-management-api
docker compose ps
curl -I http://127.0.0.1:8000/login

Compose 推荐:

ports:
- "127.0.0.1:8000:8000"

不要使用 0.0.0.0:8000:8000,它会让 8000 暴露公网。若当前是 8000:8000,先确认 Nginx 和域名成功,再关闭公网 8000,并调整安全组。

5. 用域名验收​

curl -I http://api.example.com/login
curl -I http://api.example.com/static/css/common.css
curl -I http://api.example.com/docs
状态含义先检查
200Nginx 和 FastAPI 已连通页面和静态资源
301/302存在跳转网站设置和 URL
404路径或站点配置错误域名、路由、静态目录
502Nginx 找不到后端容器、8000、日志
无法连接DNS、80 或安全组问题nslookup、安全组、Nginx

6. 502 固定排查顺序​

docker compose ps
curl -I http://127.0.0.1:8000/login
docker compose logs --tail=100 api

如果本机访问失败,问题在 Docker、FastAPI 或数据库,不在域名;如果本机成功但域名 502,重点检查宝塔代理目标和 Nginx 配置。

7. 端口和安全组​

端口用途公网
22SSH 管理按需开放
80HTTP → Nginx开放
443HTTPS,下一课配置下一课开放
8000FastAPI 内部端口不开放
3306宝塔 MySQL不开放

8. 一分钟自测​

Nginx 反向代理目标应该填哪个?

  • A. http://127.0.0.1:8000
  • B. http://api.example.com:8000
  • C. 宝塔 MySQL 的 3306 端口

答案:A。Nginx 和 FastAPI 在同一台 ECS 上,后端目标是本机 8000。

本课通关证据​

nslookup api.example.com
docker compose ps
curl -I http://127.0.0.1:8000/login
curl -I http://api.example.com/login
curl -I http://api.example.com/static/css/common.css

保存域名解析结果、宝塔反向代理截图、curl 响应和容器日志。不要上传密码、Token、私钥或 Cookie。

完成后进入第 17 课:用宝塔启用 HTTPS。遇到错误时,请贴操作系统、完整命令和错误输出,但隐藏密码、Token 与私钥。

课程推荐

想系统学习这门课程?

你已阅读完本文。需要更完整的知识体系,可以继续了解「Vibe Coding 实战课程」。

查看课程详情