Replace server redirects Lua impl with NJS impl

This commit is contained in:
Elizabeth Martin Campos 2024-11-26 00:14:41 +01:00
parent d304f4c4e3
commit 20987c083c
No known key found for this signature in database
GPG key ID: 5338FD45A0CE142D
3 changed files with 27 additions and 4 deletions

View file

@ -0,0 +1,16 @@
function srv_redirect(req) {
const redirectTo = req.variables.tmp_redirect_to;
const requestUri = req.variables.request_uri.replace(/\/$/, '');
const useForwardedHeaders = req.variables.forwarded_headers
const xForwardedProto = req.variables.http_x_forwarded_proto;
const xForwardedPort = req.variables.http_x_forwarded_port;
const redirectScheme = useForwardedHeaders && xForwardedProto ? xForwardedProto : req.variables.scheme;
const redirectPort = useForwardedHeaders && xForwardedPort ? xForwardedPort : req.variables.server_port;
return `${redirectScheme}://${redirectTo}:${redirectPort}${requestUri}`;
}
export default { srv_redirect };

View file

@ -12,6 +12,8 @@
# setup custom paths that do not require root access # setup custom paths that do not require root access
pid {{ .PID }}; pid {{ .PID }};
load_module /etc/nginx/modules/ngx_http_js_module.so;
{{ if $cfg.UseGeoIP2 }} {{ if $cfg.UseGeoIP2 }}
load_module /etc/nginx/modules/ngx_http_geoip2_module.so; load_module /etc/nginx/modules/ngx_http_geoip2_module.so;
{{ end }} {{ end }}
@ -74,6 +76,10 @@ http {
init_worker_by_lua_file /etc/nginx/lua/ngx_conf_init_worker.lua; init_worker_by_lua_file /etc/nginx/lua/ngx_conf_init_worker.lua;
js_import /etc/nginx/js/nginx/ngx_srv_redirect.js;
js_set $njs_srv_redirect ngx_srv_redirect.srv_redirect;
{{/* Enable the real_ip module only if we use either X-Forwarded headers or Proxy Protocol. */}} {{/* Enable the real_ip module only if we use either X-Forwarded headers or Proxy Protocol. */}}
{{/* we use the value of the real IP for the geo_ip module */}} {{/* we use the value of the real IP for the geo_ip module */}}
{{ if or (or $cfg.UseForwardedHeaders $cfg.UseProxyProtocol) $cfg.EnableRealIP }} {{ if or (or $cfg.UseForwardedHeaders $cfg.UseProxyProtocol) $cfg.EnableRealIP }}
@ -572,9 +578,10 @@ http {
} }
{{ end }} {{ end }}
set_by_lua_file $redirect_to /etc/nginx/lua/nginx/ngx_srv_redirect.lua {{ $redirect.To }}; set $tmp_redirect_to '{{ $redirect.To }}';
set $tmp_forwarded_headers '{{ $cfg.UseForwardedHeaders }}';
return {{ $all.Cfg.HTTPRedirectCode }} $redirect_to; return {{ $all.Cfg.HTTPRedirectCode }} $njs_srv_redirect;
} }
## end server {{ $redirect.From }} ## end server {{ $redirect.From }}
{{ end }} {{ end }}

View file

@ -49,7 +49,7 @@ var _ = framework.DescribeAnnotation("from-to-www-redirect", func() {
f.WaitForNginxConfiguration( f.WaitForNginxConfiguration(
func(cfg string) bool { func(cfg string) bool {
return strings.Contains(cfg, `server_name www.fromtowwwredirect.bar.com;`) && return strings.Contains(cfg, `server_name www.fromtowwwredirect.bar.com;`) &&
strings.Contains(cfg, `return 308 $redirect_to;`) strings.Contains(cfg, `return 308 $njs_srv_redirect;`)
}) })
ginkgo.By("sending request to www.fromtowwwredirect.bar.com") ginkgo.By("sending request to www.fromtowwwredirect.bar.com")
@ -88,7 +88,7 @@ var _ = framework.DescribeAnnotation("from-to-www-redirect", func() {
f.WaitForNginxServer(toHost, f.WaitForNginxServer(toHost,
func(server string) bool { func(server string) bool {
return strings.Contains(server, fmt.Sprintf(`server_name %v;`, toHost)) && return strings.Contains(server, fmt.Sprintf(`server_name %v;`, toHost)) &&
strings.Contains(server, `return 308 $redirect_to;`) strings.Contains(server, `return 308 $njs_srv_redirect;`)
}) })
ginkgo.By("sending request to www should redirect to domain") ginkgo.By("sending request to www should redirect to domain")