Skip to content

Instantly share code, notes, and snippets.

@lxfontes
Created December 8, 2014 20:16
Show Gist options
  • Save lxfontes/8a6ce11a33a1171a9390 to your computer and use it in GitHub Desktop.
Save lxfontes/8a6ce11a33a1171a9390 to your computer and use it in GitHub Desktop.
nginx + consul
server {
server_name titans.local;
location / {
set $target '';
set $upstream_name 'titans_staging_web';
rewrite_by_lua '
local resolver = require "resty.dns.resolver"
local r, err = resolver:new {
nameservers = {{"127.0.0.1", 8600}},
retrans = 5, -- 5 retransmissions on receive timeout
timeout = 2000, -- 2 sec
}
if not r then
ngx.say("resolver error: ", err)
return ngx.exit(503)
end
local srvs, err = r:query(ngx.var.upstream_name .. ".service.consul", { qtype = r.TYPE_SRV })
if not srvs then
ngx.say("failed to query the DNS server: ", err)
return ngx.exit(503)
end
if srvs.errcode then
ngx.say("server returned error code: ", srvs.errcode,
": ", srvs.errstr)
return ngx.exit(503)
end
-- pick a server, but we still need to lookup the final address
local srv_target = table.remove(srvs, 1)
local answers, err = r:query(srv_target.target)
if not answers then
ngx.say("failed to query DNS server: ", err)
return ngx.exit(503)
end
if answers.errcode then
ngx.say("failed to query DNS server: ", answers.errcode, ": ", answers.errstr)
return ngx.exit(503)
end
local server_target = table.remove(answers, 1)
ngx.var.target = server_target.address .. ":" .. srv_target.port
';
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_connect_timeout 10;
proxy_pass http://$target;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment