ngix配置

小网站的nginx配置记录

GPT总结版

Nginx 配置说明文档(新手友好版)

1. 什么是 Nginx?

Nginx(发音为"engine x")是一个高性能的 Web 服务器和反向代理服务器。它可以:

  • 作为 Web 服务器提供静态文件
  • 作为反向代理转发请求到其他服务器
  • 负载均衡
  • 缓存
  • 等等...

1.1 什么是反向代理?

想象一下,反向代理就像一个智能接线员:

  1. 用户拨打总机号码(访问 Nginx)
  2. 接线员(Nginx)根据用户需求(URL 路径)
  3. 将电话转接到相应的部门(转发到对应的服务)

1.2 为什么需要 Nginx?

  1. 统一入口:所有请求都通过 Nginx,便于管理
  2. 安全性:用户无法直接访问后端服务
  3. 灵活性:可以随时修改后端服务,而不影响用户
  4. 性能优化:提供缓存、压缩等功能

2. 我们的系统架构

2.1 整体架构图

用户 -> Nginx(80端口) -> 前端网页(frontend:80)
                     -> 后端API(api:8000)

2.2 工作流程举例

当用户访问 http://arena.when2buy.ai/api/v1/predictions/leaderboard 时:

  1. 请求首先到达 Nginx(80端口)
  2. Nginx 看到 URL 包含 /api/v1/
  3. 根据规则转发到后端 API 服务(8000端口)
  4. API 处理请求并返回结果
  5. 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)找不到收件人(后端服务)。可能的原因:

  1. 后端服务没启动

    • 检查命令:docker-compose ps
    • 正常应该看到所有服务都是 Up 状态
  2. 后端服务启动中

    • 查看启动日志:docker-compose logs api
    • 等待几秒钟再试
  3. 网络问题

    • 测试网络:
    # 进入 Nginx 容器测试能否访问后端
    docker exec stockarena-nginx curl http://api:8000/api/v1/predictions/leaderboard?time_window=7d
    

4.2 如何重启服务?

如果修改了配置或遇到问题,可以:

  1. 只重启 Nginx
docker-compose restart nginx
  1. 重启所有服务
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 配置文件管理

  1. 备份配置

    • 定期备份 nginx/nginx.conf
    • 记录每次修改的内容和原因
  2. 修改配置

    • 修改前先备份
    • 修改后重启 Nginx:docker-compose restart nginx
    • 测试是否正常工作

7.3 监控检查项

  1. 响应时间:页面加载是否变慢
  2. 错误率:是否有大量 502 错误
  3. 并发连接数:同时访问的用户数

8. 术语解释(新手必读)

  1. 端口

    • 类似房子的门牌号
    • 80 端口是网站的默认端口
    • 8000 端口是我们后端服务使用的端口
  2. 代理

    • 正向代理:代理客户端(比如 VPN)
    • 反向代理:代理服务器(我们的 Nginx)
  3. 请求头

    • 类似快递单上的信息
    • 包含来源、目标、类型等信息
  4. 域名

    • 比如 arena.when2buy.ai
    • 是 IP 地址的别名,方便记忆
  5. Docker

    • 容器化工具
    • 把每个服务打包成独立的容器运行

9. 故障排除流程图

访问出错
   ↓
检查服务状态 (docker-compose ps)
   ↓
   ├── 服务未运行 → 启动服务 (docker-compose up -d)
   ├── 服务运行中 → 检查日志 (docker-compose logs)
   └── 服务正常   → 检查网络 (curl 测试)
posted @ 2025-03-21 15:08  超超不会写代码  阅读(66)  评论(0)    收藏  举报