Nginx
Nginx 是项目部署中常用的 Web 服务器和反向代理服务器。
这套课程统一使用 Docker 运行 Nginx。宿主机只负责保存配置文件、静态资源和执行 Docker 命令,不安装宿主机版 Nginx。
课程不讲源码,也不展开过重的性能调优。我们重点解决一个问题:如何用 Docker 和 Nginx 把 Web 项目稳定地部署出来。
课程目标
学完之后,你应该能完成这些事情:
- 使用 Docker 启动和管理 Nginx。
- 挂载静态文件和 Nginx 配置目录。
- 看懂
nginx.conf、server和location的层级。 - 部署静态网站和前端单页应用。
- 使用 Nginx 反向代理 Docker 网络中的后端服务。
- 使用
upstream完成简单负载均衡。 - 配置动静分离和静态资源缓存。
- 通过证书挂载为容器中的 Nginx 配置 HTTPS。
- 使用 Docker 日志排查 403、404、502、504 等常见问题。
- 使用 Docker Compose 部署“前端 + Nginx + FastAPI”项目。
前置知识
学习本课程前,建议先掌握:
- Linux 基本命令。
- Docker 镜像、容器、端口和数据卷的基本使用。
- Docker 网络和 Docker Compose 的基础用法。
- HTTP 请求、响应、域名和端口的基本概念。
- 前端静态文件和后端 API 的基本区别。
统一实验约定
整套课程使用下面的约定:
| 项目 | 约定 |
|---|---|
| Nginx 镜像 | nginx:1.30.5-alpine3.24(课程验证版本;升级时重新检查所有示例) |
| 综合案例 Python | python:3.12.14-slim-bookworm |
| 综合案例依赖 | FastAPI 0.141.1、Uvicorn 0.53.0 |
| Docker Compose | 使用支持 depends_on.condition: service_healthy 的 Compose v2 插件;本次验证环境为 v5.5.1 |
| Nginx 容器名 | zx-nginx |
| 本地 HTTP 地址 | http://127.0.0.1:8080 |
| 本地 HTTPS 地址 | https://127.0.0.1:8443 |
| 教学域名 | zhengxinonly.com |
| 站点配置 | 宿主机 conf.d/ 挂载到 /etc/nginx/conf.d/ |
| 静态文件 | 宿主机 html/ 挂载到 /usr/share/nginx/html/ |
| 配置检查 | docker exec zx-nginx nginx -t |
| 重新加载 | docker exec zx-nginx nginx -s reload |
| 查看日志 | docker logs zx-nginx |
开始前检查本机工具与镜像实际版本:
shell
docker version
docker compose version
docker run --rm nginx:1.30.5-alpine3.24 nginx -Vnginx -V 输出中应包含 --with-http_v2_module。镜像标签固定了课程使用的 Nginx 与 Alpine 版本,但同一标签仍可能收到维护更新;严格复现某次构建时,可在验证后记录镜像摘要。升级镜像或 Python 依赖后,先运行各章的配置检查和综合项目回归请求。
课堂本地实验不依赖公网 DNS。需要匹配域名时,使用:
shell
curl -H "Host: zhengxinonly.com" http://127.0.0.1:8080每章使用独立实验目录。切换章节前,可以删除同名实验容器:
shell
docker rm -f zx-nginx命令只会删除容器,不会删除宿主机中的配置文件和静态资源。
章节目录
Part 01:Nginx 基础与静态部署
Part 02:反向代理与流量分发
Part 03:HTTPS 与上线实战
学习路线
Part 01 先把 Nginx 容器跑起来,掌握配置挂载、加载顺序、虚拟主机和路径匹配。
Part 02 进入部署核心:Docker 网络、反向代理、负载均衡、动静分离和缓存。
Part 03 先解决证书挂载、HTTP 跳转 HTTPS 和 Certbot 容器续期,再完成日志排错、Docker Compose 综合部署和生产配置补强。
综合案例
综合实战会部署一个完整 Web 项目:
- Nginx 容器托管前端静态页面。
- FastAPI 运行在独立容器中。
/api/请求通过 Docker 网络转发到 FastAPI。- 静态资源启用缓存。
- HTTP 自动跳转 HTTPS。
- 使用 Docker 日志排查一次 502。