mkdir /data/nginx/conf.d/ssl /data/nginx/conf.d/lua -p
#lua脚本文件
cd /data/nginx/conf.d/lua/
cat >split.lua<<EOF
function split(str, pat)
local t = {}
local fpat = "(.-)" .. pat
local last_end = 1
local s, e, cap =str:find(fpat,1)
while s do
if s ~= 1 or cap ~= "" then
table.insert(t,cap)
end
last_end = e+1
s, e, cap = str:find(fpat, last_end)
end
if last_end <= #str then
cap = str:sub(last_end)
table.insert(t, cap)
end
return t
end
function split_path(str)
return split(str,'[\\/]+')
end
EOF
#nginx 配置文件
cd /data/nginx/conf.d/
cat > require.conf <<EOF
init_worker_by_lua_file "/etc/nginx/conf.d/lua/split.lua";
server {
listen 80;
server_name *.com;
index index.html index.htm index.php;
location = /redis {
internal;
redis2_raw_queries $args $echo_request_body;
redis2_pass 10.1.1.123:6379;
}
location / {
set $target '';
access_by_lua '
local parameters = split_path(ngx.var.uri)
local action = parameters[1]
local action1 = parameters[2]
local action2 = ngx.var.host
function LsReadis(key)
local parser = require "redis.parser"
local reqs = {
{"auth", "xxxx"},
{"get", key}
}
local raw_reqs = {}
for i, req in ipairs(reqs) do
table.insert(raw_reqs, parser.build_query(req))
end
local res = ngx.location.capture("/redis?" .. #reqs,
{ body = table.concat(raw_reqs, "") })
if res.status ~= 200 or not res.body then
ngx.log(ngx.ERR, "failed to query redis")
ngx.exit(500)
end
replies = parser.parse_replies(res.body, #reqs)
return replies[2][1]
end
if ngx.var.uri == "/" then
if LsReadis("rdc-domain:"..action2) == nil then
ngx.exit(501)
else
server=LsReadis("rdc-domain:"..action2)
end
end
if server == "" then
server = "www.xxx.com"
end
ngx.var.target = server
';
resolver 8.8.8.8;
proxy_pass http://$target;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
EOF
docker run -d -p 80:80 -p 443:443 --restart=always -v `pwd`/conf.d:/etc/nginx/conf.d --name openresty openresty/openresty
网友评论