简介说明
Nginx 是一款高性能的开源 Web 服务器和反向代理服务器,以其出色的性能、稳定性和低资源消耗而闻名,广泛应用于各种规模的网站和应用程序中。
主要功能
Web 服务器:提供静态文件服务,支持高并发访问
反向代理:将客户端请求转发到后端服务器,实现负载分担
负载均衡:在多个后端服务器之间分配请求,提高系统可用性
SSL/TLS 终端:处理 HTTPS 加密连接,减轻后端服务器负担
缓存服务:提供内容缓存功能,加速响应速度
API 网关:统一管理和路由 API 请求
适用场景
高并发 Web 应用的前端代理
微服务架构中的 API 网关
静态资源服务器
多服务器集群的负载均衡器
HTTPS 证书管理和 SSL 卸载
安装部署
# 资源需求
Docker_v20+
Docker-Compose_v2.0+
# 准备文件夹(分别为 配置、网页文件、日志、ssl证书 文件夹)
sudo mkdir -p /home/faramita/nginx-xie/conf
sudo mkdir -p /home/faramita/nginx-xie/html
sudo mkdir -p /home/faramita/nginx-xie/logs
sudo mkdir -p /home/faramita/nginx-xie/ssl
sudo chmod 777 -R /home/faramita/nginx-xie
# 准备配置文件 /home/faramita/nginx-xie/conf/nginx.conf
# Nginx 主要依靠配置不同的配置文件 nginx.conf 来实现不同的功能
# 因此配置文件 nginx.conf 的具体内容,在之后不同的功能处详细介绍
# 此处假设配置文件 nginx.conf 已准备完毕
# /home/faramita/nginx-xie/docker-compose.yml 文件如下
version: '3.1'
services:
nginx:
image: nginx:latest
container_name: nginx-xie
restart: always
ports:
# 自定义服务端口
- '9080:9999'
# http 端口
- '80:80'
# https 端口
- '443:443'
privileged: true
volumes:
- ./conf/nginx.conf:/etc/nginx/nginx.conf
- ./logs:/var/log/nginx
- ./html:/html
- ./ssl:/etc/nginx/ssl
# 一键安装并启动
sudo docker-compose up -d
# 若 nginx-xie 容器并未运行成功,可前往 ./logs 文件夹中查看日志来寻找失败原因
使用 Tips
上传文件大小
# nginx 反向代理默认传输文件大小为 1M,可通过以下配置更改
client_max_body_size 100M;
# 将上述代码配置在不同地方则具有不同的作用域,可以根据具体需求配置,示例如下:
events {worker_connections 1024;}
http {
# 作用在整个 http 全局
client_max_body_size 100M;
server {
listen 9801;
server_name www.jusdot.cn;
# 作用在整个 server 块
client_max_body_size 100M;
location / {
# 作用在整个 路由 块
client_max_body_size 100M;
proxy_pass http://127.0.0.1:9099/;
}
}
}
超时配置
# 针对需要长时间处理的服务,配置合适的超时时间
http {
server {
location /api/ {
# 连接后端服务器的超时时间
proxy_connect_timeout 60s;
# 向后端服务器发送请求的超时时间
proxy_send_timeout 300s;
# 从后端服务器读取响应的超时时间
proxy_read_timeout 300s;
# 客户端请求体读取超时时间
client_body_timeout 60s;
# 客户端请求头读取超时时间
client_header_timeout 60s;
}
}
}
缓冲区优化
# 针对大文件传输或流式响应,可以调整缓冲区设置
http {
server {
location /upload/ {
# 关闭代理缓冲,适用于流式传输
proxy_buffering off;
proxy_request_buffering off;
# 或者调整缓冲区大小(适用于需要缓冲的场景)
# proxy_buffer_size 64k;
# proxy_buffers 8 64k;
# proxy_busy_buffers_size 128k;
}
}
}
日志配置
# 自定义日志格式,便于监控和调试
http {
# 定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'rt=$request_time uct="$upstream_connect_time" '
'uht="$upstream_header_time" urt="$upstream_response_time"';
server {
# 使用自定义日志格式
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
# 针对特定路径使用不同的日志
location /api/ {
access_log /var/log/nginx/api_access.log main;
}
# 关闭某些路径的访问日志(如健康检查)
location /health {
access_log off;
}
}
}
反向代理
准备配置文件
# 配置文件 /home/faramita/nginx-xie/conf/nginx.conf 如下
events {worker_connections 1024;}
http {
# 设置传输文件大小
client_max_body_size 100m;
# 定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'rt=$request_time uct="$upstream_connect_time" '
'uht="$upstream_header_time" urt="$upstream_response_time"';
server {
# (外部访问)监听容器内 9999 端口
# 因为在 docker-compose.yml 文件中的 ports 部分设置了 '9080:9999'
# 按需自定义,与 docker-compose.yml 文件中的端口设置保持一致
listen 9999;
# (外部访问)url ,即之后用此 url 来访问,可以是 IP 或 域名
# 配置域名:该域名必须真实存在且已配置解析到 Nginx 部署所在的服务器上
server_name www.jusdot.cn;
# 配置 IP :Nginx 部署所在的服务器的 IP
# server_name 192.168.1.100;
# 混合多个配置 :以空格隔开,这样 IP 和 域名 都可以访问
# server_name 192.168.1.100 www.jusdot.cn;
# 通配符 或 不配置 :如果不需要特定的 server_name ,可以直接 省略该行 或 使用通配符
# 匹配任何主机名:是指用户输入的任何地址来者不拒(如 IP, www.jusdot.cn, jusdot.cn),但前提是这些请求能到达 Nginx 所在服务器
# server_name _;
# 代理路由
location / {
# 需要转发的路由,可以代理到任何可达的网络地址,包括:
# 本机服务: 127.0.0.1
# 本机其他容器: 172.17.x.x
# 局域网其他服务器: 192.168.1.105
# 公网其他服务: api.example.com
# 只要网络是通的,就能正常转发请求
proxy_pass http://192.168.1.105:1001/;
# 设置代理头,确保后端服务能正确获取客户端信息
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;
}
# 上述配置效果:
# 用户访问 http://www.jusdot.cn:9080/ 等于访问 http://192.168.1.105:1001/
# 整体访问流程如下:
# 用户访问: http://www.jusdot.cn:9080/
# ↓
# DNS 解析: www.jusdot.cn → 192.168.1.100 (Nginx 所在的宿主机 IP)
# ↓
# 请求到达: 宿主机端口 9080
# ↓
# Docker 转发: 宿主机 192.168.1.100:9080 → 容器:9999
# ↓
# Nginx 接收: 容器内 Nginx (监听 9999)
# ↓
# server_name 匹配: 匹配到 www.jusdot.cn
# ↓
# proxy_pass 代理转发: http://192.168.1.105:1001
# ↓
# 请求响应: 到达 192.168.1.105:1001 响应请求
# 代理路由
location /faramita {
# 需要转发的路由
proxy_pass http://192.168.11.100:9080/;
# 设置代理头,确保后端服务能正确获取客户端信息
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;
}
# 上述配置效果:
# 用户访问 http://www.jusdot.cn:9080/faramita 等于访问 http://192.168.11.100:9080/
# 代理路由
location /cealum {
# 需要转发的路由
proxy_pass http://192.168.11.100:7210/;
# 设置代理头,确保后端服务能正确获取客户端信息
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;
}
# 上述配置效果:
# 用户访问 http://www.jusdot.cn:9080/cealum 等于访问 http://192.168.11.100:7210/
# 代理路由
location /app/reader {
# 需要转发的路由
proxy_pass http://www.test.com:10098/app/myreader/;
# 设置代理头,确保后端服务能正确获取客户端信息
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;
}
# 上述配置效果:
# 用户访问 http://www.jusdot.cn:9080/app/reader 等于访问 http://www.test.com:10098/app/myreader/
}
# 若需要代理多个域名,则配置多个 server 块即可
# server {
# listen xxx;
# server_name api.example.com;
# ...
# }
}
反向代理+HTTPS
(Step1)获取 SSL 证书
# 假设已有 阿里云 域名:jusdot.cn
# 前往 阿里云控制台 - 数字证书管理服务(SSL) - 免费开启 SSL 证书 - SSL 证书 - 免费证书 - 创建证书 - 证书申请:
# 证书绑定域名:www.faramita.jusdot.cn(之后使用 https 的域名)
# 域名验证方式:自动DNS验证(阿里云的域名可以自动验证,非阿里云的域名,选择手动验证并按照提示操作即可)
# 联系人:XX
# 所在地:XX
# 密钥算法:RSA
# CSR生成方式:系统生成
# 提交审核(一般5分钟之内),审核通过后证书显示已签发
# 点击下载 - 选择 Nginx 类型证书下载
# 将下载的证书解压后,重命名为域名(易于理解):
www.faramita.jusdot.cn.pem
www.faramita.jusdot.cn.key
# 将证书文件放入 /home/faramita/nginx-xie/ssl 文件夹内,如:
/home/faramita/nginx-xie/ssl/www.faramita.jusdot.cn.pem
/home/faramita/nginx-xie/ssl/www.faramita.jusdot.cn.key
(Step2)准备配置文件
# 配置文件 /home/faramita/nginx-xie/conf/nginx.conf 如下
events {worker_connections 1024;}
http {
# 设置传输文件大小
client_max_body_size 100m;
# 定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'rt=$request_time uct="$upstream_connect_time" '
'uht="$upstream_header_time" urt="$upstream_response_time"';
server {
# (外部访问)监听容器内 443 端口
# 因为在 docker-compose.yml 文件中的 ports 部分设置了 '443:443'
# 按需自定义,与 docker-compose.yml 文件中的端口设置保持一致
listen 443 ssl;
# (外部访问)url ,即之后用此 url 来访问,由于要使用 https ,所以此处只设置 域名
# 配置域名:该域名必须真实存在且已配置解析到 Nginx 部署所在的服务器上
server_name www.faramita.jusdot.cn;
# .pem 和 .key 证书路径
# 注意证书路径一定要为容器内路径 (/etc/nginx/ssl/**),因为在 docker-compose.yml 文件中映射了文件夹 ./ssl:/etc/nginx/ssl
ssl_certificate /etc/nginx/ssl/www.faramita.jusdot.cn.pem;
ssl_certificate_key /etc/nginx/ssl/www.faramita.jusdot.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
# 代理路由
location / {
# 需要转发的路由,可以代理到任何可达的网络地址,包括:
# 本机服务: 127.0.0.1
# 本机其他容器: 172.17.x.x
# 局域网其他服务器: 192.168.1.105
# 公网其他服务: api.example.com
# 只要网络是通的,就能正常转发请求
proxy_pass http://192.168.1.105:1001/;
# 设置代理头,确保后端服务能正确获取客户端信息
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://www.faramita.jusdot.cn/ 等于访问 http://192.168.1.105:1001/
# 整体访问流程如下:
# 用户访问: https://www.faramita.jusdot.cn/
# ↓
# DNS 解析: www.faramita.jusdot.cn → 192.168.1.100 (Nginx 所在的宿主机 IP)
# ↓
# 请求到达: 宿主机端口 443
# ↓
# Docker 转发: 宿主机 192.168.1.100:443 → 容器:443
# ↓
# Nginx 接收: 容器内 Nginx (监听 443)
# ↓
# server_name 匹配: 匹配到 www.faramita.jusdot.cn
# ↓
# proxy_pass 代理转发: http://192.168.1.105:1001
# ↓
# 请求响应: 到达 192.168.1.105:1001 响应请求
# 代理路由
location /faramita {
# 需要转发的路由
proxy_pass http://192.168.11.100:9080/;
# 设置代理头,确保后端服务能正确获取客户端信息
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://www.faramita.jusdot.cn/faramita 等于访问 http://192.168.11.100:9080/
# 代理路由
location /cealum {
# 需要转发的路由
proxy_pass http://192.168.11.100:7210/;
# 设置代理头,确保后端服务能正确获取客户端信息
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://www.faramita.jusdot.cn/cealum 等于访问 http://192.168.11.100:7210/
# 代理路由
location /app/reader {
# 需要转发的路由
proxy_pass http://www.test.com:10098/app/myreader/;
# 设置代理头,确保后端服务能正确获取客户端信息
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://www.faramita.jusdot.cn/app/reader 等于访问 http://www.test.com:10098/app/myreader/
}
# 禁止 http 访问(按需开启,取消注释即可)
# server {
# # 同时监听 80 端口(http)
# listen 80;
# server_name www.faramita.jusdot.cn;
# # 将所有 http 的请求强制转发为 https
# rewrite ^(.*)$ https://$server_name$1 permanent;
# }
# 上述配置效果:
# 用户无法访问 http://www.faramita.jusdot.cn/ (因为所有 http 请求都会强制转发为 https,实现了禁止 http 访问)
# 若需要代理多个域名,则配置多个 server 块即可
# 每个域名都可以同时监听 80 端口(http) 和 443 端口(https)
# server {
# listen 80;
# server_name api.example.com;
# }
# server {
# listen 443 ssl;
# server_name api.example.com;
# ...
# ssl_certificate xxx.pem;
# ssl_certificate_key xxx.key;
# ...
# }
}
负载均衡
准备配置文件
# 配置文件 /home/faramita/nginx-xie/conf/nginx.conf 如下
# 实现效果:
# 服务器集群共 3 台 GPU 服务器
# 每台 GPU 服务器有 2 张 GPU 卡(如 RTX3090)
# 每张 GPU 卡都运行了一个服务(如声音克隆服务),url 如 http://192.168.1.10:12321/AIVoice/TTS/CosyVoice2/xxx
# 但由于 AI 服务比较耗显存,因此实际上一张卡只能支持 2 并发
# 所以需要限制:客户端在调用服务器集群服务时,每张卡只接受 2 个并发请求,每台服务器只接受 2×2=4 个并发请求,服务器集群只接受 3×4=12 个并发请求
# 最终 GPU 集群提供统一的服务访问 url ,如 http://www.jusdot.cn:9080/AIVoice/TTS/CosyVoice2/xxx
events {
# 增加连接数以支持更多并发
worker_connections 2048;
use epoll;
multi_accept on;
worker_rlimit_nofile 65535;
}
http {
# 设置传输文件大小
client_max_body_size 100M;
# WebSocket 连接升级映射(预留扩展,不影响 HTTP 服务)
map $http_upgrade $connection_upgrade {
default upgrade; # 当客户端发送 Upgrade 头时,设置为 upgrade
'' close; # 当没有 Upgrade 头时,设置为 close(普通 HTTP 请求)
}
# 限制整个服务器集群的总并发连接数(优先级最高),分配 10MB 内存存储状态
limit_conn_zone $server_name zone=cluster_conn_limit:10m;
# (可选)限制单个客户端 IP 的并发连接数,防止某个客户端占用过多资源,分配 10MB 内存存储状态
limit_conn_zone $binary_remote_addr zone=client_conn_limit:10m;
# 定义服务器集群(直接代理到每台服务器的每张 GPU 卡的服务)
upstream tts_cluster {
# 使用最少连接数负载均衡算法
least_conn;
# 服务器 01 (192.168.1.10) - 2 张 GPU 卡 - 每张卡限制 2 并发
server 192.168.1.10:12321 max_conns=2 weight=1 max_fails=3 fail_timeout=30s; # 服务器 01 - GPU 0 服务
server 192.168.1.10:12322 max_conns=2 weight=1 max_fails=3 fail_timeout=30s; # 服务器 01 - GPU 1 服务
# 服务器 02 (192.168.1.11) - 2 张 GPU 卡 - 每张卡限制 2 并发
server 192.168.1.11:12321 max_conns=2 weight=1 max_fails=3 fail_timeout=30s; # 服务器 02 - GPU 0 服务
server 192.168.1.11:12322 max_conns=2 weight=1 max_fails=3 fail_timeout=30s; # 服务器 02 - GPU 1 服务
# 服务器 03 (192.168.1.12) - 2 张 GPU 卡 - 每张卡限制 2 并发
server 192.168.1.12:12321 max_conns=2 weight=1 max_fails=3 fail_timeout=30s; # 服务器 03 - GPU 0 服务
server 192.168.1.12:12322 max_conns=2 weight=1 max_fails=3 fail_timeout=30s; # 服务器 03 - GPU 1 服务
# 保持连接活跃,减少频繁建立连接的开销(仅适用于 HTTP/1.1 连接)
keepalive 64;
}
# 定义日志格式(针对 TTS 集群优化)
log_format cluster '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'upstream_addr=$upstream_addr '
'upstream_response_time=$upstream_response_time '
'request_time=$request_time '
'server_name=$server_name '
'connections_active=$connections_active '
'upstream_status=$upstream_status '
'upstream_connect_time=$upstream_connect_time';
# 服务器配置
server {
# (外部访问)监听容器内 9999 端口
# 因为在 docker-compose.yml 文件中的 ports 部分设置了 '9080:9999'
# 按需自定义,与 docker-compose.yml 文件中的端口设置保持一致
listen 9999;
# (外部访问)url ,即之后用此 url 来访问,可以是 IP 或 域名
# 配置域名:该域名必须真实存在且已配置解析到 Nginx 部署所在的服务器上
server_name www.jusdot.cn;
# 配置 IP :Nginx 部署所在的服务器的 IP
# server_name 192.168.1.100;
# 混合多个配置 :以空格隔开,这样 IP 和 域名 都可以访问
# server_name 192.168.1.100 www.jusdot.cn;
# 通配符 或 不配置 :如果不需要特定的 server_name ,可以直接 省略该行 或 使用通配符
# 匹配任何主机名:是指用户输入的任何地址来者不拒(如 IP, www.jusdot.cn, jusdot.cn),但前提是这些请求能到达 Nginx 所在服务器
# server_name _;
# 访问日志
# 使用自定义格式记录集群访问日志,包含上游服务器信息和响应时间
access_log /var/log/nginx/cosyvoice_cluster_access.log cluster;
# 错误日志,用于排查集群故障
error_log /var/log/nginx/cosyvoice_cluster_error.log;
# 超时设置(通用配置,适合大多数服务)
# 连接超时:建立连接等待时间
proxy_connect_timeout 30s;
# 发送超时:发送请求数据等待时间
proxy_send_timeout 60s;
# 读取超时:读取响应数据等待时间
proxy_read_timeout 60s;
# 缓冲区设置(通用配置,适合普通服务)
# 开启响应缓冲:提高传输效率,减少后端压力
proxy_buffering on;
# 开启请求缓冲:支持大文件上传
proxy_request_buffering on;
# 设置合理的缓冲区大小
proxy_buffer_size 4k;
proxy_buffers 8 4k;
# 代理路由
location /AIVoice/TTS/CosyVoice2/ {
# 限制整个服务器集群的总并发连接数(优先级最高),如:3台服务器 × 2张卡 × 2并发 = 12 总并发
limit_conn cluster_conn_limit 12;
# (可选)限制单个客户端 IP 的并发连接数,防止某个客户端占用过多资源
limit_conn client_conn_limit 6;
# 当超过并发连接限制时,返回 503 错误
limit_conn_status 503;
# 将请求转发给上游服务器集群
proxy_pass http://tts_cluster/AIVoice/TTS/CosyVoice2/;
# 设置代理头,确保后端服务能正确获取客户端信息
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;
# HTTP/1.1 协议支持
proxy_http_version 1.1;
# WebSocket 支持配置(预留扩展)
# 当客户端请求 WebSocket 升级时,转发 Upgrade 头到后端服务
proxy_set_header Upgrade $http_upgrade;
# 根据是否有 Upgrade 头来设置 Connection 头( upgrade 或 close )
proxy_set_header Connection $connection_upgrade;
# 故障转移配置
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_next_upstream_tries 3;
proxy_next_upstream_timeout 30s;
# 流式 TTS 服务专用配置(覆盖 server 块的通用配置)
# 禁用 gzip 压缩:避免压缩延迟,确保实时传输
gzip off;
# 关闭代理缓冲:确保流式音频数据实时传输
proxy_buffering off;
# 关闭请求缓冲:支持大文本输入的实时传输
proxy_request_buffering off;
# 延长超时时间:支持长时间流式传输
proxy_read_timeout 300s;
proxy_send_timeout 300s;
# 设置小缓冲区:减少内存占用,提高响应速度
proxy_buffer_size 4k;
proxy_buffers 8 4k;
}
# 上述配置效果:
# 用户访问 http://www.jusdot.cn:9080/AIVoice/TTS/CosyVoice2/xxx 等于访问 GPU 集群服务
# 整体访问流程如下:
# 用户访问: http://www.jusdot.cn:9080/AIVoice/TTS/CosyVoice2/xxx
# ↓
# DNS 解析: www.jusdot.cn → 192.168.1.100 (Nginx 所在的宿主机 IP)
# ↓
# 请求到达: 宿主机端口 9080
# ↓
# Docker 转发: 宿主机 192.168.1.100:9080 → 容器:9999
# ↓
# Nginx 接收: 容器内 Nginx (监听 9999)
# ↓
# server_name 匹配: 匹配到 www.jusdot.cn
# ↓
# 并发限制检查: 检查集群总并发(≤12) 和 单IP并发(≤6)
# ↓
# 负载均衡: 选择最少连接的 GPU 服务(3台×2卡×2并发=12总并发)
# ↓
# proxy_pass 代理转发: http://选中的GPU服务器:端口/AIVoice/TTS/CosyVoice2/xxx
# ↓
# 流式响应: 实时音频数据流式传输回用户
# 集群状态监控端点
location /cluster/status {
access_log off;
add_header Content-Type application/json;
return 200 '{"status": "healthy", "cluster": "tts_cluster", "timestamp": "$time_iso8601", "total_capacity": 12, "servers": 3, "gpus_per_server": 2, "concurrent_per_gpu": 2}';
}
# 上述配置效果:
# 访问 http://www.jusdot.cn:9080/cluster/status 返回集群状态信息,用于监控系统整体运行状态和负载能力
# 包含:集群健康状态、总容量(12并发)、服务器数量(3台)、GPU配置等 JSON 格式数据
# 健康检查端点
location /health {
access_log off;
return 200 "healthy\n";
add_header Content-Type text/plain;
}
# 上述配置效果:
# 访问 http://www.jusdot.cn:9080/health 返回简单健康状态(不记录访问日志,减少不必要的日志写入)
# 返回纯文本 "healthy",用于负载均衡器或监控系统的心跳检测
# 错误页面处理
error_page 502 503 504 @error_page;
location @error_page {
internal;
add_header Content-Type application/json always;
return 503 '{"error": {"code": "service_unavailable", "message": "超出并发限制,服务器过载,请稍后重试", "type": "cluster_overload", "timestamp": "$time_iso8601"}}';
}
# 上述配置效果:
# 当后端服务返回 502/503/504 错误或触发并发限制时,返回统一的 JSON 错误信息
# 包含错误代码、友好提示、错误类型和时间戳
# 默认错误处理
error_page 404 @not_found;
location @not_found {
internal;
add_header Content-Type application/json always;
return 404 '{"error": {"code": "not_found", "message": "请求的资源不存在", "type": "not_found", "timestamp": "$time_iso8601"}}';
}
# 上述配置效果:
# 当访问不存在的路径时,返回结构化的 JSON 错误信息
# 替代默认的 Nginx 404 页面,保持 API 响应格式一致性
}
}
评论区