kong--kong
239 行
5.9 KiB
Lua
239 行
5.9 KiB
Lua
return [[
|
|
|
|
log_format basic '$remote_addr [$time_local] '
|
|
'$protocol $status $bytes_sent $bytes_received '
|
|
'$session_time';
|
|
|
|
lua_package_path '${{LUA_PACKAGE_PATH}};;';
|
|
lua_package_cpath '${{LUA_PACKAGE_CPATH}};;';
|
|
lua_socket_pool_size ${{LUA_SOCKET_POOL_SIZE}};
|
|
lua_socket_log_errors off;
|
|
lua_max_running_timers 4096;
|
|
lua_max_pending_timers 16384;
|
|
|
|
include 'nginx-kong-stream-inject.conf';
|
|
|
|
lua_shared_dict stream_kong 5m;
|
|
lua_shared_dict stream_kong_locks 8m;
|
|
lua_shared_dict stream_kong_healthchecks 5m;
|
|
lua_shared_dict stream_kong_cluster_events 5m;
|
|
lua_shared_dict stream_kong_rate_limiting_counters 12m;
|
|
lua_shared_dict stream_kong_core_db_cache ${{MEM_CACHE_SIZE}};
|
|
lua_shared_dict stream_kong_core_db_cache_miss 12m;
|
|
lua_shared_dict stream_kong_db_cache ${{MEM_CACHE_SIZE}};
|
|
lua_shared_dict stream_kong_db_cache_miss 12m;
|
|
lua_shared_dict stream_kong_secrets 5m;
|
|
|
|
> if ssl_ciphers then
|
|
ssl_ciphers ${{SSL_CIPHERS}};
|
|
> end
|
|
|
|
# injected nginx_stream_* directives
|
|
> for _, el in ipairs(nginx_stream_directives) do
|
|
$(el.name) $(el.value);
|
|
> end
|
|
|
|
> if ssl_cipher_suite == 'old' then
|
|
lua_ssl_conf_command CipherString DEFAULT:@SECLEVEL=0;
|
|
proxy_ssl_conf_command CipherString DEFAULT:@SECLEVEL=0;
|
|
ssl_conf_command CipherString DEFAULT:@SECLEVEL=0;
|
|
> end
|
|
|
|
init_by_lua_block {
|
|
> if test and coverage then
|
|
require 'luacov'
|
|
jit.off()
|
|
> end -- test and coverage
|
|
-- shared dictionaries conflict between stream/http modules. use a prefix.
|
|
local shared = ngx.shared
|
|
local stream_shdict_prefix = "stream_"
|
|
ngx.shared = setmetatable({}, {
|
|
__pairs = function()
|
|
local i
|
|
return function()
|
|
local k, v = next(shared, i)
|
|
i = k
|
|
if k and k:sub(1, #stream_shdict_prefix) == stream_shdict_prefix then
|
|
k = k:sub(#stream_shdict_prefix + 1)
|
|
end
|
|
return k, v
|
|
end
|
|
end,
|
|
__index = function(t, k)
|
|
return shared[stream_shdict_prefix .. k]
|
|
end,
|
|
})
|
|
|
|
Kong = require 'kong'
|
|
Kong.init()
|
|
}
|
|
|
|
init_worker_by_lua_block {
|
|
Kong.init_worker()
|
|
}
|
|
|
|
upstream kong_upstream {
|
|
server 0.0.0.1:1;
|
|
balancer_by_lua_block {
|
|
Kong.balancer()
|
|
}
|
|
|
|
# injected nginx_supstream_* directives
|
|
> for _, el in ipairs(nginx_supstream_directives) do
|
|
$(el.name) $(el.value);
|
|
> end
|
|
}
|
|
|
|
> if #stream_listeners > 0 then
|
|
# non-SSL listeners, and the SSL terminator
|
|
server {
|
|
> for _, entry in ipairs(stream_listeners) do
|
|
> if not entry.ssl then
|
|
listen $(entry.listener);
|
|
> end
|
|
> end
|
|
|
|
> if stream_proxy_ssl_enabled then
|
|
listen unix:${{SOCKET_PATH}}/${{STREAM_TLS_TERMINATE_SOCK}} ssl proxy_protocol;
|
|
> end
|
|
|
|
access_log ${{PROXY_STREAM_ACCESS_LOG}};
|
|
error_log ${{PROXY_STREAM_ERROR_LOG}} ${{LOG_LEVEL}};
|
|
|
|
> for _, ip in ipairs(trusted_ips) do
|
|
set_real_ip_from $(ip);
|
|
> end
|
|
set_real_ip_from unix:;
|
|
|
|
# injected nginx_sproxy_* directives
|
|
> for _, el in ipairs(nginx_sproxy_directives) do
|
|
$(el.name) $(el.value);
|
|
> end
|
|
|
|
> if stream_proxy_ssl_enabled then
|
|
> for i = 1, #ssl_cert do
|
|
ssl_certificate $(ssl_cert[i]);
|
|
ssl_certificate_key $(ssl_cert_key[i]);
|
|
> end
|
|
ssl_session_cache shared:StreamSSL:${{SSL_SESSION_CACHE_SIZE}};
|
|
ssl_certificate_by_lua_block {
|
|
Kong.ssl_certificate()
|
|
}
|
|
ssl_client_hello_by_lua_block {
|
|
Kong.ssl_client_hello()
|
|
}
|
|
> end
|
|
|
|
set $upstream_host '';
|
|
preread_by_lua_block {
|
|
Kong.preread()
|
|
}
|
|
proxy_ssl_name $upstream_host;
|
|
|
|
proxy_ssl on;
|
|
proxy_ssl_server_name on;
|
|
> if client_ssl then
|
|
proxy_ssl_certificate ${{CLIENT_SSL_CERT}};
|
|
proxy_ssl_certificate_key ${{CLIENT_SSL_CERT_KEY}};
|
|
> end
|
|
proxy_pass kong_upstream;
|
|
|
|
log_by_lua_block {
|
|
Kong.log()
|
|
}
|
|
}
|
|
|
|
> if stream_proxy_ssl_enabled then
|
|
# SSL listeners, but only preread the handshake here
|
|
server {
|
|
> for _, entry in ipairs(stream_listeners) do
|
|
> if entry.ssl then
|
|
listen $(entry.listener:gsub(" ssl", ""));
|
|
> end
|
|
> end
|
|
|
|
access_log ${{PROXY_STREAM_ACCESS_LOG}};
|
|
error_log ${{PROXY_STREAM_ERROR_LOG}} ${{LOG_LEVEL}};
|
|
|
|
> for _, ip in ipairs(trusted_ips) do
|
|
set_real_ip_from $(ip);
|
|
> end
|
|
|
|
# injected nginx_sproxy_* directives
|
|
> for _, el in ipairs(nginx_sproxy_directives) do
|
|
$(el.name) $(el.value);
|
|
> end
|
|
|
|
preread_by_lua_block {
|
|
Kong.preread()
|
|
}
|
|
|
|
ssl_preread on;
|
|
|
|
proxy_protocol on;
|
|
|
|
set $kong_tls_preread_block 1;
|
|
set $kong_tls_preread_block_upstream '';
|
|
proxy_pass $kong_tls_preread_block_upstream;
|
|
}
|
|
|
|
server {
|
|
listen unix:${{SOCKET_PATH}}/${{STREAM_TLS_PASSTHROUGH_SOCK}} proxy_protocol;
|
|
|
|
access_log ${{PROXY_STREAM_ACCESS_LOG}};
|
|
error_log ${{PROXY_STREAM_ERROR_LOG}} ${{LOG_LEVEL}};
|
|
|
|
set_real_ip_from unix:;
|
|
|
|
# injected nginx_sproxy_* directives
|
|
> for _, el in ipairs(nginx_sproxy_directives) do
|
|
$(el.name) $(el.value);
|
|
> end
|
|
|
|
preread_by_lua_block {
|
|
Kong.preread()
|
|
}
|
|
|
|
ssl_preread on;
|
|
|
|
set $kong_tls_passthrough_block 1;
|
|
|
|
proxy_pass kong_upstream;
|
|
|
|
log_by_lua_block {
|
|
Kong.log()
|
|
}
|
|
}
|
|
> end -- stream_proxy_ssl_enabled
|
|
|
|
> if database == "off" then
|
|
server {
|
|
listen unix:${{SOCKET_PATH}}/${{STREAM_CONFIG_SOCK}};
|
|
|
|
error_log ${{ADMIN_ERROR_LOG}} ${{LOG_LEVEL}};
|
|
|
|
content_by_lua_block {
|
|
Kong.stream_config_listener()
|
|
}
|
|
}
|
|
> end -- database == "off"
|
|
|
|
server { # ignore (and close }, to ignore content)
|
|
listen unix:${{SOCKET_PATH}}/${{STREAM_RPC_SOCK}};
|
|
error_log ${{ADMIN_ERROR_LOG}} ${{LOG_LEVEL}};
|
|
content_by_lua_block {
|
|
Kong.stream_api()
|
|
}
|
|
}
|
|
> end -- #stream_listeners > 0
|
|
|
|
server {
|
|
listen unix:${{SOCKET_PATH}}/${{STREAM_WORKER_EVENTS_SOCK}};
|
|
error_log ${{ADMIN_ERROR_LOG}} ${{LOG_LEVEL}};
|
|
access_log off;
|
|
content_by_lua_block {
|
|
require("resty.events.compat").run()
|
|
}
|
|
}
|
|
]]
|