http {
# 定义上游服务器组
upstream file_backend {
# 基于file_id的哈希负载均衡
hash $file_id consistent;
server A地址:9101; # A服务器IP和端口
server B地址:9101; # B服务器IP和端口
server C地址:9101; # C服务器IP和端口
}
# 定义上游服务器组(后端节点)
upstream random_backend {
# 默认使用轮询负载均衡算法
server A地址:9101; # A服务器IP和端口
server B地址:9101; # B服务器IP和端口
server C地址:9101; # C服务器IP和端口
}
# 从URL中提取file_id
map $request_uri $file_id {
default "";
~/v1/api/file/page\?fileID=(?<f>[^&]+) $f;
# 导出相关接口
~/v1/api/files/(?<f>[^/]+)/export $f;
~/v1/api/files/(?<f>[^/]+)/export/progress $f;
# 预览相关接口
~/api/files/(?<f>[^/]+)/preview/url $f;
}
server {
listen 8081;
server_name 172.1.1.3; # 替换为你的域名或IP
# 公共代理参数
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;
# 添加自定义头显示后端服务器IP
add_header X-Backend-Server $upstream_addr;
add_header X-Backend-Status $upstream_status;
# 文件相关接口 - 基于fileID固定转发
location ~ ^/v1/api/file/page {
proxy_pass http://file_backend;
add_header X-Routing-Type "file_id_based";
}
# 导出相关接口
location ~ ^/v1/api/files/ {
proxy_pass http://file_backend;
add_header X-Routing-Type "file_id_based";
}
# 预览相关接口
location ~ ^/api/files/ {
proxy_pass http://file_backend;
add_header X-Routing-Type "file_id_based";
}
location / {
# 将请求代理到上游服务器组
proxy_pass http://random_backend;
add_header X-Routing-Type "random";
}
}
}