Skip to content

Instantly share code, notes, and snippets.

@vqiu
Forked from gmr/consul.lua
Created September 15, 2017 15:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vqiu/2a22d998d38601974d6da76da8629d41 to your computer and use it in GitHub Desktop.
Save vqiu/2a22d998d38601974d6da76da8629d41 to your computer and use it in GitHub Desktop.
Dynamic Nginx upstream nodes using Consul
module("resty.consul", package.seeall)
_VERSION = '0.1.0'
function service_nodes(service)
local http = require "resty.http"
local json = require "cjson"
local hc = http:new()
local upstream = ""
local ok, code, headers, status, body = hc:request {
url = "http://127.0.0.1:8500/v1/catalog/service/" .. service,
port = 8500,
method = "GET"
}
if body then
local nodes = json.decode(body)
node = math.random(1, #nodes)
upstream = nodes[node]["Address"] .. ":" .. nodes[node]["ServicePort"]
end
return upstream
end
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
lua_package_path "/etc/nginx/lua/?.lua;;";
lua_code_cache off;
init_by_lua 'consul = require "resty.consul"';
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
set $upstream "";
rewrite_by_lua 'ngx.var.upstream = consul.service_nodes("www")';
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_connect_timeout 10;
proxy_send_timeout 30;
proxy_read_timeout 30;
proxy_pass http://$upstream;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
@vqiu
Copy link
Author

vqiu commented Sep 15, 2017

Lua

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment