Merge pull request #2899 from jeroenvand/jvd-fix-rewrite
fixed rewrites for paths not ending in /
This commit is contained in:
commit
c083599a4b
3 changed files with 17 additions and 8 deletions
|
@ -470,7 +470,6 @@ func buildProxyPass(host string, b interface{}, loc interface{}, dynamicConfigur
|
||||||
var xForwardedPrefix string
|
var xForwardedPrefix string
|
||||||
|
|
||||||
if location.Rewrite.AddBaseURL {
|
if location.Rewrite.AddBaseURL {
|
||||||
// path has a slash suffix, so that it can be connected with baseuri directly
|
|
||||||
bPath := fmt.Sprintf("%s$escaped_base_uri", path)
|
bPath := fmt.Sprintf("%s$escaped_base_uri", path)
|
||||||
regex := `(<(?:H|h)(?:E|e)(?:A|a)(?:D|d)(?:[^">]|"[^"]*")*>)`
|
regex := `(<(?:H|h)(?:E|e)(?:A|a)(?:D|d)(?:[^">]|"[^"]*")*>)`
|
||||||
scheme := "$scheme"
|
scheme := "$scheme"
|
||||||
|
@ -494,15 +493,16 @@ subs_filter '%v' '$1<base href="%v://$http_host%v">' ro;
|
||||||
// ie /something to /
|
// ie /something to /
|
||||||
return fmt.Sprintf(`
|
return fmt.Sprintf(`
|
||||||
rewrite (?i)%s(.*) /$1 break;
|
rewrite (?i)%s(.*) /$1 break;
|
||||||
rewrite (?i)%s / break;
|
rewrite (?i)%s$ / break;
|
||||||
%v%v %s%s;
|
%v%v %s%s;
|
||||||
%v`, path, location.Path, xForwardedPrefix, proxyPass, proto, upstreamName, abu)
|
%v`, path, location.Path, xForwardedPrefix, proxyPass, proto, upstreamName, abu)
|
||||||
}
|
}
|
||||||
|
|
||||||
return fmt.Sprintf(`
|
return fmt.Sprintf(`
|
||||||
rewrite (?i)%s(.*) %s/$1 break;
|
rewrite (?i)%s(.*) %s/$1 break;
|
||||||
|
rewrite (?i)%s$ %s/ break;
|
||||||
%v%v %s%s;
|
%v%v %s%s;
|
||||||
%v`, path, location.Rewrite.Target, xForwardedPrefix, proxyPass, proto, upstreamName, abu)
|
%v`, path, location.Rewrite.Target, location.Path, location.Rewrite.Target, xForwardedPrefix, proxyPass, proto, upstreamName, abu)
|
||||||
}
|
}
|
||||||
|
|
||||||
// default proxy_pass
|
// default proxy_pass
|
||||||
|
|
|
@ -123,6 +123,7 @@ var (
|
||||||
"~* /",
|
"~* /",
|
||||||
`
|
`
|
||||||
rewrite (?i)/(.*) /jenkins/$1 break;
|
rewrite (?i)/(.*) /jenkins/$1 break;
|
||||||
|
rewrite (?i)/$ /jenkins/ break;
|
||||||
proxy_pass http://upstream-name;
|
proxy_pass http://upstream-name;
|
||||||
`,
|
`,
|
||||||
false,
|
false,
|
||||||
|
@ -137,7 +138,7 @@ proxy_pass http://upstream-name;
|
||||||
`~* ^/something\/?(?<baseuri>.*)`,
|
`~* ^/something\/?(?<baseuri>.*)`,
|
||||||
`
|
`
|
||||||
rewrite (?i)/something/(.*) /$1 break;
|
rewrite (?i)/something/(.*) /$1 break;
|
||||||
rewrite (?i)/something / break;
|
rewrite (?i)/something$ / break;
|
||||||
proxy_pass http://upstream-name;
|
proxy_pass http://upstream-name;
|
||||||
`,
|
`,
|
||||||
false,
|
false,
|
||||||
|
@ -152,6 +153,7 @@ proxy_pass http://upstream-name;
|
||||||
"~* ^/end-with-slash/(?<baseuri>.*)",
|
"~* ^/end-with-slash/(?<baseuri>.*)",
|
||||||
`
|
`
|
||||||
rewrite (?i)/end-with-slash/(.*) /not-root/$1 break;
|
rewrite (?i)/end-with-slash/(.*) /not-root/$1 break;
|
||||||
|
rewrite (?i)/end-with-slash/$ /not-root/ break;
|
||||||
proxy_pass http://upstream-name;
|
proxy_pass http://upstream-name;
|
||||||
`,
|
`,
|
||||||
false,
|
false,
|
||||||
|
@ -166,6 +168,7 @@ proxy_pass http://upstream-name;
|
||||||
`~* ^/something-complex\/?(?<baseuri>.*)`,
|
`~* ^/something-complex\/?(?<baseuri>.*)`,
|
||||||
`
|
`
|
||||||
rewrite (?i)/something-complex/(.*) /not-root/$1 break;
|
rewrite (?i)/something-complex/(.*) /not-root/$1 break;
|
||||||
|
rewrite (?i)/something-complex$ /not-root/ break;
|
||||||
proxy_pass http://upstream-name;
|
proxy_pass http://upstream-name;
|
||||||
`,
|
`,
|
||||||
false,
|
false,
|
||||||
|
@ -180,6 +183,7 @@ proxy_pass http://upstream-name;
|
||||||
"~* /",
|
"~* /",
|
||||||
`
|
`
|
||||||
rewrite (?i)/(.*) /jenkins/$1 break;
|
rewrite (?i)/(.*) /jenkins/$1 break;
|
||||||
|
rewrite (?i)/$ /jenkins/ break;
|
||||||
proxy_pass http://upstream-name;
|
proxy_pass http://upstream-name;
|
||||||
|
|
||||||
set_escape_uri $escaped_base_uri $baseuri;
|
set_escape_uri $escaped_base_uri $baseuri;
|
||||||
|
@ -197,7 +201,7 @@ subs_filter '(<(?:H|h)(?:E|e)(?:A|a)(?:D|d)(?:[^">]|"[^"]*")*>)' '$1<base href="
|
||||||
`~* ^/something\/?(?<baseuri>.*)`,
|
`~* ^/something\/?(?<baseuri>.*)`,
|
||||||
`
|
`
|
||||||
rewrite (?i)/something/(.*) /$1 break;
|
rewrite (?i)/something/(.*) /$1 break;
|
||||||
rewrite (?i)/something / break;
|
rewrite (?i)/something$ / break;
|
||||||
proxy_pass http://upstream-name;
|
proxy_pass http://upstream-name;
|
||||||
|
|
||||||
set_escape_uri $escaped_base_uri $baseuri;
|
set_escape_uri $escaped_base_uri $baseuri;
|
||||||
|
@ -215,6 +219,7 @@ subs_filter '(<(?:H|h)(?:E|e)(?:A|a)(?:D|d)(?:[^">]|"[^"]*")*>)' '$1<base href="
|
||||||
`~* ^/end-with-slash/(?<baseuri>.*)`,
|
`~* ^/end-with-slash/(?<baseuri>.*)`,
|
||||||
`
|
`
|
||||||
rewrite (?i)/end-with-slash/(.*) /not-root/$1 break;
|
rewrite (?i)/end-with-slash/(.*) /not-root/$1 break;
|
||||||
|
rewrite (?i)/end-with-slash/$ /not-root/ break;
|
||||||
proxy_pass http://upstream-name;
|
proxy_pass http://upstream-name;
|
||||||
|
|
||||||
set_escape_uri $escaped_base_uri $baseuri;
|
set_escape_uri $escaped_base_uri $baseuri;
|
||||||
|
@ -232,6 +237,7 @@ subs_filter '(<(?:H|h)(?:E|e)(?:A|a)(?:D|d)(?:[^">]|"[^"]*")*>)' '$1<base href="
|
||||||
`~* ^/something-complex\/?(?<baseuri>.*)`,
|
`~* ^/something-complex\/?(?<baseuri>.*)`,
|
||||||
`
|
`
|
||||||
rewrite (?i)/something-complex/(.*) /not-root/$1 break;
|
rewrite (?i)/something-complex/(.*) /not-root/$1 break;
|
||||||
|
rewrite (?i)/something-complex$ /not-root/ break;
|
||||||
proxy_pass http://upstream-name;
|
proxy_pass http://upstream-name;
|
||||||
|
|
||||||
set_escape_uri $escaped_base_uri $baseuri;
|
set_escape_uri $escaped_base_uri $baseuri;
|
||||||
|
@ -249,7 +255,7 @@ subs_filter '(<(?:H|h)(?:E|e)(?:A|a)(?:D|d)(?:[^">]|"[^"]*")*>)' '$1<base href="
|
||||||
`~* ^/something\/?(?<baseuri>.*)`,
|
`~* ^/something\/?(?<baseuri>.*)`,
|
||||||
`
|
`
|
||||||
rewrite (?i)/something/(.*) /$1 break;
|
rewrite (?i)/something/(.*) /$1 break;
|
||||||
rewrite (?i)/something / break;
|
rewrite (?i)/something$ / break;
|
||||||
proxy_pass http://upstream-name;
|
proxy_pass http://upstream-name;
|
||||||
|
|
||||||
set_escape_uri $escaped_base_uri $baseuri;
|
set_escape_uri $escaped_base_uri $baseuri;
|
||||||
|
@ -267,6 +273,7 @@ subs_filter '(<(?:H|h)(?:E|e)(?:A|a)(?:D|d)(?:[^">]|"[^"]*")*>)' '$1<base href="
|
||||||
`~* /`,
|
`~* /`,
|
||||||
`
|
`
|
||||||
rewrite (?i)/(.*) /something/$1 break;
|
rewrite (?i)/(.*) /something/$1 break;
|
||||||
|
rewrite (?i)/$ /something/ break;
|
||||||
proxy_pass http://sticky-upstream-name;
|
proxy_pass http://sticky-upstream-name;
|
||||||
`,
|
`,
|
||||||
false,
|
false,
|
||||||
|
@ -281,6 +288,7 @@ proxy_pass http://sticky-upstream-name;
|
||||||
`~* /`,
|
`~* /`,
|
||||||
`
|
`
|
||||||
rewrite (?i)/(.*) /something/$1 break;
|
rewrite (?i)/(.*) /something/$1 break;
|
||||||
|
rewrite (?i)/$ /something/ break;
|
||||||
proxy_pass http://upstream_balancer;
|
proxy_pass http://upstream_balancer;
|
||||||
`,
|
`,
|
||||||
false,
|
false,
|
||||||
|
@ -295,6 +303,7 @@ proxy_pass http://upstream_balancer;
|
||||||
`~* ^/there\/?(?<baseuri>.*)`,
|
`~* ^/there\/?(?<baseuri>.*)`,
|
||||||
`
|
`
|
||||||
rewrite (?i)/there/(.*) /something/$1 break;
|
rewrite (?i)/there/(.*) /something/$1 break;
|
||||||
|
rewrite (?i)/there$ /something/ break;
|
||||||
proxy_set_header X-Forwarded-Prefix "/there/";
|
proxy_set_header X-Forwarded-Prefix "/there/";
|
||||||
proxy_pass http://sticky-upstream-name;
|
proxy_pass http://sticky-upstream-name;
|
||||||
`,
|
`,
|
||||||
|
|
|
@ -56,7 +56,7 @@ var _ = framework.IngressNginxDescribe("Annotations - Rewrite", func() {
|
||||||
err = f.WaitForNginxServer(host,
|
err = f.WaitForNginxServer(host,
|
||||||
func(server string) bool {
|
func(server string) bool {
|
||||||
return strings.Contains(server, "rewrite (?i)/something/(.*) /$1 break;") &&
|
return strings.Contains(server, "rewrite (?i)/something/(.*) /$1 break;") &&
|
||||||
strings.Contains(server, "rewrite (?i)/something / break;")
|
strings.Contains(server, "rewrite (?i)/something$ / break;")
|
||||||
})
|
})
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ var _ = framework.IngressNginxDescribe("Annotations - Rewrite", func() {
|
||||||
|
|
||||||
logs, err := f.NginxLogs()
|
logs, err := f.NginxLogs()
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
Expect(logs).To(ContainSubstring(`"(?i)/something" matches "/something", client:`))
|
Expect(logs).To(ContainSubstring(`"(?i)/something$" matches "/something", client:`))
|
||||||
Expect(logs).To(ContainSubstring(`rewritten data: "/", args: "",`))
|
Expect(logs).To(ContainSubstring(`rewritten data: "/", args: "",`))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue