OpenResty配置Nginx根据body中的Json参数指定代理服务
需求:
因考虑应对高并发,项目准备使用Nginx代理多服务地址实现负载均衡,多台服务器中有一台服务器为高性能服务器,所以需要某些复杂逻辑接口单独请求这个高性能服务器,其他请求走轮询配置服务器。
实现思路:
因为项目暴露请求全部是POST请求,参数采用Json格式传递,原生Nginx无法对请求中的Json参数进行处理,故使用OpenResty的Lua脚本配置完成。
OpenResty下载地址:http://openresty.org/cn/download.html
下载完直接解压即可,文件夹内嵌的有Nginx,因为我的需求只是用到Nginx,所以只配置Nginx,其他的没做研究,就当作Lua环境。
Nginx配置如下:
http{
...
upstream ipBox{
server 192.168.xxx.xxx:8092;
server 192.168.xxx.xxx:8092;
}
server {
listen 81;
server_name localhost;
lua_need_request_body on;
location / {
--默认走ipBox轮询
set $target_proxy ipBox;
--处理请求函数,别用成content_by_lua_block了,这个是处理响应
access_by_lua_block {
--获取body数据
ngx.req.read_body()
local args = ngx.req.get_body_data()
--引入json,把json字符串转json对象
local json = require "cjson"
local json_obj = json.decode(args)
local isMaster = json_obj.isMaster
--ngx.say("<p>hello, world</p>",isMaster)
-- 判断isMaster是否等于1
if isMaster == 1 then
-- 转发到指定的代理IP地址
ngx.var.target_proxy = "192.168.xxx.xxx:8092"
end
}
proxy_pass http://$target_proxy;
root html;
index index.html index.htm;
}
...
}
PostMan测试配置

文章讲述了如何使用OpenResty的Lua脚本在Nginx中根据POST请求的Json参数决定是否将请求转发至高性能服务器,实现基于负载均衡的动态代理配置。
1536





