events {
	worker_connections 1024;
}

env HOSTNAME;
env NODE_NAME;
env POD_NAME;
env POD_NAMESPACE;
env POD_IP;

http {
	default_type 'text/plain';
	# maximum allowed size of the client request body. By default this is 1m.
	# Request with bigger bodies nginx will return error code 413.
	# http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size
	client_max_body_size 10m;

	init_by_lua_block {
		local template = require("template")
		-- template syntax documented here:
		-- https://github.com/bungle/lua-resty-template/blob/master/README.md
		tmpl = template.compile([[


Hostname: {{os.getenv("HOSTNAME") or "N/A"}}

Pod Information:
{% if os.getenv("POD_NAME") then %}
	node name:	{{os.getenv("NODE_NAME") or "N/A"}}
	pod name:	{{os.getenv("POD_NAME") or "N/A"}}
	pod namespace:	{{os.getenv("POD_NAMESPACE") or "N/A"}}
	pod IP:	{{os.getenv("POD_IP") or "N/A"}}
{% else %}
	-no pod information available-
{% end %}

Server values:
	server_version=nginx: {{ngx.var.nginx_version}} - lua: {{ngx.config.ngx_lua_version}}

Request Information:
	client_address={{ngx.var.remote_addr}}
	method={{ngx.req.get_method()}}
	real path={{ngx.var.request_uri}}
	query={{ngx.var.query_string or ""}}
	request_version={{ngx.req.http_version()}}
	request_uri={{ngx.var.scheme.."://"..ngx.var.host..":"..ngx.var.server_port..ngx.var.request_uri}}

Request Headers:
{% for i, key in ipairs(keys) do %}
	{{key}}={{headers[key]}}
{% end %}

Request Body:
{{ngx.var.request_body or "	-no body in request-"}}
]])
	}

	server {
		# please check the benefits of reuseport https://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1
		# basically instructs to create an individual listening socket for each worker process (using the SO_REUSEPORT
		# socket option), allowing a kernel to distribute incoming connections between worker processes.
		listen 8080 default_server reuseport;

		# Replace '_' with your hostname.
		server_name _;

		location / {
			lua_need_request_body on;
			content_by_lua_block {
				ngx.header["Server"] = "echoserver"

				local headers = ngx.req.get_headers()
				local keys = {}
				for key, val in pairs(headers) do
					table.insert(keys, key)
				end
				table.sort(keys)

				ngx.say(tmpl({os=os, ngx=ngx, keys=keys, headers=headers}))
			}
		}
	}
}
