nginx+lua 通过header参数动态生成upstream,实现动态转发
原理:通过读取请求header中的某一个参数,实现动态改变upstream的IP地址,
user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http{
proxy_connect_timeout 90s;
proxy_read_timeout 90s;
proxy_send_timeout 90s;
upstream tcp9004 {
server 127.0.0.1:1122;
}
server{
listen 2021;
server_name localhost;
proxy_ignore_client_abort on;
root /root/html;
location / {
set $upstream ""; 创建一个空的upstream
rewrite_by_lua '
local headers_tab = ngx.req.get_headers() 获取请求header
for k, v in pairs(headers_tab) do
if k=="proxy" then
ngx.var.upstream = v 给他upstream赋值
end
end';
proxy_pass http://$upstream;
}
}
}
请求
headers={"proxy":"113.28.6320.5239:80"}
response = requests.request(method="post",
# url="https://httpbin.org/ip",headers=headers,proxies=proxies)
url="http://123.123.123.123:2021/test",headers=headers, json=datajson)
print(response.text)