如何在Nginx同一location下访问多台后端服务器
问题分析与解决方案
你当前的核心问题是**proxy_pass直接硬编码了第一台服务器的地址**,完全没有用到定义好的upstream块,所以所有请求都会固定指向192.168.12.38:3004。按以下步骤修改即可实现两台服务器的负载均衡访问:
1. 修正upstream的合法命名
Nginx的upstream名称不允许包含斜杠,把你原有的my/api/call改为合法名称(比如my_api_call):
upstream my_api_call { server 192.168.12.38:3004; server 192.168.12.38:3500; }
2. 修改proxy_pass指向upstream
将location块中的proxy_pass目标改为刚才定义的upstream名称,同时保留原有的路径拼接逻辑:
location ~ ^/my/api/call(/?)(.*) { proxy_pass http://my_api_call/my/api/call$2?$args; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
额外优化(可选)
Nginx默认使用轮询策略自动分配请求到两台服务器,如果需要更定制化的负载规则,可以给server添加参数:
- 权重分配:让某台服务器接受更多请求
upstream my_api_call { server 192.168.12.38:3004 weight=2; # 接受2倍于另一台的请求量 server 192.168.12.38:3500; } - IP哈希:绑定用户IP到固定服务器,解决会话保持问题
upstream my_api_call { ip_hash; server 192.168.12.38:3004; server 192.168.12.38:3500; }
内容的提问来源于stack exchange,提问作者skIndia
相关产品推荐
相关产品推荐

