[toc]
Nginx容器笔记
前言
Nginx是一个高性能的Web服务器和反向代理服务器,常用于负载均衡、缓存、SSL终止等场景。
本笔记记录了在Docker容器中部署Nginx的步骤。
Nginx部署的使用场景
Nginx本身的作用是作为Web服务器和反向代理服务器。它既能直接部署在服务器上,也可以部署在Docker容器中。
选择要点:
- 单机部署:胜在「轻量、低门槛、系统集成度高」,适合个人单项目、资源紧张、不懂 Docker 的场景;
- 容器部署:胜在「隔离性、一致性、易管理」,适合多项目、企业级、容器化架构、需快速迁移的场景;
单机部署 Nginx 使用场景
适合这些场景
- 个人极简场景:单服务器、单项目(如仅部署一个 UniApp H5 页面 + FastAPI 接口),服务器资源紧张(如 1 核 1G 低配云服务器);
- 运维成本优先:不熟悉 Docker,只想快速部署,且短期内不会换服务器 / 迁移;
- 系统深度集成:需 Nginx 和系统级工具强联动(如系统自带的日志采集、定时脚本修改 Nginx 配置);
- 临时测试 / 小流量站点:部署后几乎无需改动,且对环境一致性无要求(如个人博客、测试页面)。
不适合这些场景
- 多项目 / 多版本 Nginx 共存(如同时部署 5 个个人项目,需不同配置);
- 需快速迁移 / 扩缩容(如换服务器、新增节点);
- 团队协作(多人修改配置易冲突)。
注意事项
建议每个项目单独建配置文件(如 proj1.conf/proj2.conf),避免单文件过大难维护。
容器化部署 Nginx 使用场景
适合这些场景
- 多项目管理:容器化 Nginx 可统一代理所有项目,且和后端服务/数据库等容器在同一网络,无需手动配置 IP;
- 环境一致性要求高:开发/测试/生产环境需完全一致(如本地 Docker 测试 Nginx 配置,直接同步到远程服务器);
- 快速部署/迁移:频繁换服务器、或需在多节点部署(如企业集群),镜像 +docker-compose.yml 一键迁移;
- 微服务/容器化架构:后端、数据库、前端都已容器化,Nginx 作为容器集群的统一入口,联动更便捷;
- 企业级多团队协作:不同团队管理不同项目,容器隔离可避免配置冲突、权限混乱;
- 多版本/多实例需求:需同时运行不同版本的 Nginx(如测试新版 Nginx 特性,不影响生产)。
不适合这些场景
- 服务器资源极度紧缺(如 1 核 512M 服务器,需极致节省内存);
- 运维人员完全不懂 Docker,且无学习成本(短期可先用单机,后期迁移)。
注意事项
- 必须通过 -v 挂载配置/静态文件/日志目录(否则容器内修改重启后丢失);
- Nginx 容器需和后端容器在同一网络中,否则无法通过容器名访问;
- 更新Nginx配置需进入Nginx容器中执行;
Nginx 容器部署
Nginx容器中的这几个文件和目录都需要挂载到宿主机中,以便后续修改和查看。
- /etc/nginx/nginx.conf 文件 是Nginx 的主配置文件
- /etc/nginx/conf.d 目录 是Nginx 次配置文件所在的目录(如 xxx.conf)
- /var/log/nginx 目录 是Nginx 日志目录
- /usr/share/nginx/html 目录 是是Nginx 静态页面目录
① 先在宿主机中创建目录,用于存放Nginx容器的配置文件和目录。
sh
# 该目录用于存储Nginx容器中的配置文件、网页目录、日志目录等。
mkdir /shuyx/docker/nginx② 创建一个临时的Nginx容器,用于复制默认配置文件和目录到指定目录中。没有这些文件,后续部署的新的ginx容器就无法正常运行。
shell
# 临时Nginx容器,复制默认配置
docker run --name temp-nginx -d nginx:stable
# 复制临时Nginx容器的主配置文件到宿主机的/shuyx/docker/nginx/conf/目录
docker cp temp-nginx:/etc/nginx/nginx.conf /shuyx/docker/nginx/conf/
# 复制其他配置目录
docker cp temp-nginx:/etc/nginx/conf.d/ /shuyx/docker/nginx/conf.d/
# 复制静态页面目录
docker cp temp-nginx:/usr/share/nginx/html /shuyx/docker/nginx/html/
# 复制日志目录
docker cp temp-nginx:/var/log/nginx /shuyx/docker/nginx/logs/
# 停止并删除临时Nginx容器
docker stop temp-nginx && docker rm temp-nginx③ 创建并运行Nginx容器
普通写法
sh
# 创建并后台启动nginx容器
# --name myNginx 容器名称为myNginx
# -p 80:80 主机的80端口映射到Nginx容器的80端口。
# -p 443:443 主机的443端口映射到Nginx容器的443端口。
# -d 后台运行,默认不会进入容器
# nginx:stable 镜像名,指定生成该容器的镜像
docker run -d --name myNginx -p 80:80 -p 443:443 -v /shuyx/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /shuyx/docker/nginx/conf.d:/etc/nginx/conf.d -v /shuyx/docker/nginx/logs:/var/log/nginx -v /shuyx/docker/nginx/html:/usr/share/nginx/html -e TZ=Asia/Shanghai nginx:stable
# 进入到nginx容器的终端中
docker exec -it myNginx /bin/bash
# 查询所有容器
docker ps80端口是HTTP默认端口,443端口是HTTPS默认端口。
docker-compose.yml文件的写法
yml
services:
# 容器名称为nginx-service
nginx-service:
image: nginx:stable
ports:
- "80:80"
- "443:443"
volumes:
- /shuyx/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /shuyx/docker/nginx/conf.d:/etc/nginx/conf.d
- /shuyx/docker/nginx/html:/usr/share/nginx/html
- /shuyx/docker/nginx/logs:/var/log/nginx
environment:
- TZ=Asia/Shanghai然后在服务器的docker-compose.yml文件同目录中执行 docker-compose up -d 命令,即可启动Nginx容器。
④ 访问nginx首页 http://ip地址 或 http://ip地址:80 或 https://ip地址 或 https://ip地址:443 。
若如图所示,则表示Nginx容器部署成功。 
如果是在云服务器上部署Nginx容器,记得在云服务器的防火墙上开通对应端口。
