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;
}
...
}