Nginx、域名与 HTTPS:把容器服务变成正式网站
讲清 Nginx 反向代理、统一入口、HTTPS、静态资源缓存、上传大小限制和常见 502/404 排查。
知识目录Docker 从入门到生产部署10 / 14
动手前先知道
这篇文章对应的真实任务是:讲清 Nginx 反向代理、统一入口、HTTPS、静态资源缓存、上传大小限制和常见 502/404 排查。
第一次阅读先弄清“为什么需要这一步、它改变了哪个运行对象、失败时去哪里检查”,再执行命令。命令可以查,运行模型和排障路径才是长期能力。
Nginx 是生产环境的统一入口。用户访问域名时,不应该直接访问前端容器或后端容器,而是先进入 Nginx,再由 Nginx 转发到内部服务。
它从哪里来
Nginx 由 Igor Sysoev 在二十一世纪初开发,并于 2004 年公开发布,最初重点解决高并发连接下的 C10K 问题。它采用事件驱动模型,后来广泛承担静态资源服务、反向代理、负载均衡与 TLS 入口。
为什么需要 Nginx
Nginx 主要负责:
- 绑定 80/443 端口。
- 处理域名访问。
- 配置 HTTPS。
- 反向代理前端和后端。
- 静态资源缓存。
- 上传大小限制。
- 简单安全头。
对小艾知行录来说,Nginx 是“门面”,web 和 api 都藏在它后面。
反向代理结构
https://你的域名
↓
Nginx
├─ /api/* → api:8080
├─ /admin/* → web:3000
├─ /posts/* → web:3000
└─ 其他页面 → web:3000
这能让用户只记住一个域名,而不是前端一个端口、后端一个端口。
基础配置思路
示例结构:
server {
listen 80;
server_name example.com www.example.com;
location /api/ {
proxy_pass http://api:8080/api/;
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;
}
location / {
proxy_pass http://web:3000;
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;
}
}
实际生产里还要补 HTTPS、缓存、安全头、压缩等配置。
HTTPS 怎么处理
有域名后,建议使用 HTTPS。
流程是:
域名解析到服务器
↓
80 端口可访问
↓
申请证书
↓
Nginx 加载证书
↓
HTTP 自动跳转 HTTPS
如果域名还没买,可以先用公网 IP 测试。等域名准备好,再接 HTTPS。
静态资源缓存
Next.js 的静态资源通常带 hash,可以设置较长缓存。
示例:
location /_next/static/ {
proxy_pass http://web:3000;
add_header Cache-Control "public, max-age=31536000, immutable";
}
文章图片如果走 COS,可以由 COS/CDN 处理缓存。上传到项目本机的静态文件,则由 Nginx 控制。
上传大小限制
如果后台上传图片失败,可能不是后端问题,而是 Nginx 限制了请求体大小。
可以配置:
client_max_body_size 20m;
具体大小根据图片上传需求决定。
常见故障
访问 502:
- web/api 容器没启动。
- Nginx upstream 服务名写错。
- 容器不在同一个网络。
访问 404:
- location 路径匹配错。
- 前端路由没有正确转发。
接口跨域:
- API 地址配置不一致。
- CORS 允许域名没包含正式域名。
HTTPS 不生效:
- 域名没解析到服务器。
- 80/443 安全组没开放。
- 证书路径挂载错。
- Nginx 没重新加载配置。
小艾知行录建议
正式上线时建议:
- 域名统一入口。
- Nginx 暴露 80/443。
- API、Web、MySQL 不直接暴露公网。
- HTTP 自动跳 HTTPS。
- 管理端使用强密码。
- 上线后用浏览器和 curl 都验收一遍。
有哪里没看懂?可以只问这篇。
Jarvis 会限定在《Nginx、域名与 HTTPS:把容器服务变成正式网站》及其公开关联内容中检索,并把引用定位回原文章节。