ngix配置
小网站的nginx配置记录
GPT总结版
Nginx 配置说明文档(新手友好版)
1. 什么是 Nginx?
Nginx(发音为"engine x")是一个高性能的 Web 服务器和反向代理服务器。它可以:
- 作为 Web 服务器提供静态文件
- 作为反向代理转发请求到其他服务器
- 负载均衡
- 缓存
- 等等...
1.1 什么是反向代理?
想象一下,反向代理就像一个智能接线员:
- 用户拨打总机号码(访问 Nginx)
- 接线员(Nginx)根据用户需求(URL 路径)
- 将电话转接到相应的部门(转发到对应的服务)
1.2 为什么需要 Nginx?
- 统一入口:所有请求都通过 Nginx,便于管理
- 安全性:用户无法直接访问后端服务
- 灵活性:可以随时修改后端服务,而不影响用户
- 性能优化:提供缓存、压缩等功能
2. 我们的系统架构
2.1 整体架构图
用户 -> Nginx(80端口) -> 前端网页(frontend:80)
-> 后端API(api:8000)
2.2 工作流程举例
当用户访问 http://arena.when2buy.ai/api/v1/predictions/leaderboard 时:
- 请求首先到达 Nginx(80端口)
- Nginx 看到 URL 包含
/api/v1/ - 根据规则转发到后端 API 服务(8000端口)
- API 处理请求并返回结果
- Nginx 将结果返回给用户
3. 配置文件详解(新手友好版)
3.1 基础配置
server {
listen 80; # 告诉 Nginx 监听电脑的 80 端口
server_name _; # '_' 表示接受所有域名的请求
}
3.2 超时设置
# 下面这些都是超时设置,就像设置等待时间一样
proxy_connect_timeout 60; # 最多等待 60 秒连接后端服务器
proxy_send_timeout 60; # 最多等待 60 秒发送数据
proxy_read_timeout 60; # 最多等待 60 秒读取数据
send_timeout 60; # 最多等待 60 秒发送给用户
3.3 前端代理配置(处理网页请求)
location / {
# 当用户访问网站根目录时(比如 http://arena.when2buy.ai/)
proxy_pass http://frontend:80; # 转发请求到前端服务
# 下面这些是设置请求头,就像给快递包裹贴上标签
proxy_set_header Host $host;
# $host 是用户输入的域名(比如 arena.when2buy.ai)
proxy_set_header X-Real-IP $remote_addr;
# $remote_addr 是用户的真实 IP 地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 记录请求经过的所有 IP 地址,像快递单上的经手人记录
proxy_set_header X-Forwarded-Proto $scheme;
# $scheme 是协议类型(http 或 https)
# 错误处理设置
proxy_intercept_errors on; # 允许 Nginx 处理后端服务的错误
proxy_next_upstream error timeout http_502; # 如果遇到错误,尝试其他服务器
}
3.4 后端 API 代理配置(处理接口请求)
location /api/v1/ {
# 当用户访问 API 时(比如 http://arena.when2buy.ai/api/v1/xxx)
proxy_pass http://api:8000/api/v1/; # 转发到后端 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;
# 错误处理(同上)
proxy_intercept_errors on;
proxy_next_upstream error timeout http_502;
# 限制上传文件大小
client_max_body_size 20M; # 最大允许上传 20MB 的文件
}
3.5 错误页面配置
# 当遇到 502 错误时(后端服务不可用)
error_page 502 /502.html; # 显示一个友好的错误页面
location = /502.html {
root /usr/share/nginx/html; # 错误页面存放位置
internal; # 只允许内部访问,用户不能直接访问这个页面
}
4. 常见问题排查(新手指南)
4.1 遇到 502 错误怎么办?
502 错误就像快递员(Nginx)找不到收件人(后端服务)。可能的原因:
-
后端服务没启动
- 检查命令:
docker-compose ps - 正常应该看到所有服务都是 Up 状态
- 检查命令:
-
后端服务启动中
- 查看启动日志:
docker-compose logs api - 等待几秒钟再试
- 查看启动日志:
-
网络问题
- 测试网络:
# 进入 Nginx 容器测试能否访问后端 docker exec stockarena-nginx curl http://api:8000/api/v1/predictions/leaderboard?time_window=7d
4.2 如何重启服务?
如果修改了配置或遇到问题,可以:
- 只重启 Nginx:
docker-compose restart nginx
- 重启所有服务:
docker-compose down # 停止所有服务
docker-compose up -d # 重新启动所有服务
5. 安全注意事项
5.1 文件上传限制
- 现在限制是 20MB(
client_max_body_size 20M) - 防止用户上传超大文件占用服务器资源
5.2 超时设置
- 所有等待时间都是 60 秒
- 防止请求占用太长时间
- 如果接口确实需要更长时间,可以调整这个值
5.3 错误处理
- 配置了友好的错误页面
- 避免用户看到技术性错误信息
6. 性能优化(建议配置)
6.1 启用压缩
# 启用 gzip 压缩,可以节省带宽,加快加载速度
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
6.2 缓存设置
# 静态文件缓存 30 天
location /static/ {
expires 30d; # 30天后过期
add_header Cache-Control "public, no-transform"; # 允许浏览器和中间设备缓存
}
6.3 性能设置
# 自动设置工作进程数,通常等于 CPU 核心数
worker_processes auto;
7. 日常维护指南
7.1 日志检查
定期检查以下日志:
# 查看 Nginx 错误日志
docker-compose logs nginx
# 查看 API 服务日志
docker-compose logs api
7.2 配置文件管理
-
备份配置
- 定期备份
nginx/nginx.conf - 记录每次修改的内容和原因
- 定期备份
-
修改配置
- 修改前先备份
- 修改后重启 Nginx:
docker-compose restart nginx - 测试是否正常工作
7.3 监控检查项
- 响应时间:页面加载是否变慢
- 错误率:是否有大量 502 错误
- 并发连接数:同时访问的用户数
8. 术语解释(新手必读)
-
端口:
- 类似房子的门牌号
- 80 端口是网站的默认端口
- 8000 端口是我们后端服务使用的端口
-
代理:
- 正向代理:代理客户端(比如 VPN)
- 反向代理:代理服务器(我们的 Nginx)
-
请求头:
- 类似快递单上的信息
- 包含来源、目标、类型等信息
-
域名:
- 比如 arena.when2buy.ai
- 是 IP 地址的别名,方便记忆
-
Docker:
- 容器化工具
- 把每个服务打包成独立的容器运行
9. 故障排除流程图
访问出错
↓
检查服务状态 (docker-compose ps)
↓
├── 服务未运行 → 启动服务 (docker-compose up -d)
├── 服务运行中 → 检查日志 (docker-compose logs)
└── 服务正常 → 检查网络 (curl 测试)

浙公网安备 33010602011771号