网站首页 > 精选教程 正文
有时我们想根据用户请求的参数转发到不同的upstream,像做多机房用户路由的时候是非常有用的,实现有多种方式,一是设置不同的loction,然后让lua动态执行不同的子请求;还有就是将upstream设置成变量,让lua动态计算出返回哪个upstream;
下面演示第二种方式,假设我们的域名为aa.com,nginx配置如下:
upstream order0{
server 127.0.0.1:12580;
}
upstream order1{
server 127.0.0.1:11580;
}
server {
listen 443 ssl;
server_name aa.com;
location / {
set_by_lua_file $ups /data/lua/upsteam.lua;
add_header X-CLOSED 0;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
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_set_header Accept-Encoding "";
proxy_set_header X-Scheme $scheme;
client_max_body_size 200m;
proxy_pass http://$ups;
}
}
上面的配置设置了2个upsteam,通过set_by_lua_file指令设置变量ups,然后请求到ups变量指向的upstream中,lua代码如下:
--ip to hash函数
function iptolong(ip)
local first_index = 1
local last_index = 1
local cur_index=1
local arr = {}
local res
local split_str
split_str = "%."
while true do
first_index,_ = string.find(ip, split_str, last_index)
if nil == first_index then
arr[cur_index] = string.sub(ip, last_index, string.len(ip))
break
end
arr[cur_index] = string.sub(ip, last_index, first_index - 1)
last_index = first_index + 1
cur_index = cur_index + 1
end
res = tonumber(arr[1])*256*256*256;
res = res + tonumber(arr[2])*65536;
res =res + tonumber(arr[3])*256;
res = res + tonumber(arr[4]);
return res
end
local ip = ngx.var.remote_addr;
local ip_hash
ip_hash = iptolong(ip) % 2;
if ip_hash == 1 then
return "order1"
else
return "order0"
end
上面我们根据用户的IP做Hash计算,结果为0的返回order0,反之返回order1,即不同的IP返回不同的Upstream;然后可以在浏览器访问 aa.com的一个地址,可以让每个服务器返回不同的东西就可以看到效果了。
猜你喜欢
- 2025-06-24 每日源码分享之集电脑站+手机站+微信站+APP+小程序五合一系统
- 2025-06-24 APICloud 多端开发教程 |《企业展示》源码深度解析
- 2025-06-24 完美可用的全媒体广告精准营销服务平台PHP源码
- 2025-06-24 【推荐】一个基于 Vue3 开源免费、高颜值的中后台模版,开箱即用
- 2025-06-24 开源全新H5充值系统源码/自定义首页+充值页面/灵活对接上游渠道
- 2025-06-24 企业的数字命门,不在云,不在AI,而在那份没拿到手的源码!
- 2025-06-24 如何查看网页的HTML源代码?这里提供详细步骤
- 2025-06-24 在线抓取网页源码(爬虫获取网页源代码)
- 2025-06-24 支持分销、团购、秒杀、优惠券、微信商城项目,源码免费分享
- 2025-06-24 教你免费下载付费文档,不限次数不用任何工具,全网资料任意复制
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)