前言:
如今兄弟们对“nginx添加proxy”大约比较看重,同学们都想要学习一些“nginx添加proxy”的相关资讯。那么小编同时在网摘上网罗了一些有关“nginx添加proxy””的相关文章,希望朋友们能喜欢,同学们一起来了解一下吧!有时我们想根据用户请求的参数转发到不同的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 ; }}
上面的配置设置了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 resendlocal ip = ngx.var.remote_addr;local ip_haship_hash = iptolong(ip) % 2;if ip_hash == 1 then return "order1"else return "order0"end
上面我们根据用户的IP做Hash计算,结果为0的返回order0,反之返回order1,即不同的IP返回不同的Upstream;然后可以在浏览器访问 aa.com的一个地址,可以让每个服务器返回不同的东西就可以看到效果了。
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #nginx添加proxy