[nginx-tests] Tests: try_files with proxying without URI part.
Maxim Dounin
mdounin at mdounin.ru
Sat Apr 25 05:48:22 UTC 2026
details: http://freenginx.org/hg/nginx-tests/rev/e6cd7d62aff1
branches:
changeset: 2052:e6cd7d62aff1
user: Maxim Dounin <mdounin at mdounin.ru>
date: Sat Apr 18 01:49:46 2026 +0300
description:
Tests: try_files with proxying without URI part.
Proxying without URI part uses original unparsed URI if available, yet
since try_files modifies the effective URI, it should use the modified URI
after try_files. This is what used to happen if the URI was rewritten
or changed by an index redirection, and then modified by try_files.
diffstat:
http_try_files.t | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 74 insertions(+), 1 deletions(-)
diffs (104 lines):
diff --git a/http_try_files.t b/http_try_files.t
--- a/http_try_files.t
+++ b/http_try_files.t
@@ -21,7 +21,7 @@ use Test::Nginx;
select STDERR; $| = 1;
select STDOUT; $| = 1;
-my $t = Test::Nginx->new()->has(qw/http proxy rewrite/)->plan(23)
+my $t = Test::Nginx->new()->has(qw/http proxy rewrite/)->plan(29)
->write_file_expand('nginx.conf', <<'EOF');
%%TEST_GLOBALS%%
@@ -154,6 +154,32 @@ http {
try_files /found.html =404;
proxy_pass http://127.0.0.1:8081/changed/;
}
+
+ location /uri-after/ {
+ rewrite ^/uri-after/rewrite /uri-after/notfound break;
+ try_files /uri-after/found.html =404;
+ proxy_pass http://127.0.0.1:8081;
+ }
+
+ location /uri-after-alias/ {
+ alias %%TESTDIR%%/;
+ try_files /uri-after-alias/found.html =404;
+ proxy_pass http://127.0.0.1:8081;
+ }
+
+ location = /uri-after-alias-redirect {
+ try_files /notfound /uri-after-alias/found;
+ }
+
+ location ~ /uri-after-alias-add/(.*) {
+ alias %%TESTDIR%%/$1;
+ try_files .htm .html =404;
+ proxy_pass http://127.0.0.1:8081;
+ }
+
+ location = /uri-after-alias-add-redirect {
+ try_files /notfound /uri-after-alias-add/found;
+ }
}
server {
@@ -175,6 +201,8 @@ mkdir($t->testdir() . '/directory');
$t->write_file('directory/alias-re.html', 'SEE THIS');
mkdir($t->testdir() . '/prefix-proxy/');
$t->write_file('prefix-proxy/found.html', 'SEE THIS');
+mkdir($t->testdir() . '/uri-after/');
+$t->write_file('uri-after/found.html', 'SEE THIS');
$t->run();
###############################################################################
@@ -280,4 +308,49 @@ like(http_get('/prefix-proxy-alias/neste
}
+# try_files changes URI, so make sure that proxy_pass without the URI part
+# uses the modified URI, and not the original unparsed URI
+
+TODO: {
+local $TODO = 'not yet' unless $t->has_version('1.31.0');
+
+like(http_get('/uri-after/found'), qr!X-URI: /uri-after/found.html!,
+ 'proxy without uri, unparsed uri not used');
+
+}
+
+like(http_get('/uri-after/rewrite'), qr!X-URI: /uri-after/found.html!,
+ 'proxy without uri, after rewrite');
+
+TODO: {
+local $TODO = 'not yet' unless $t->has_version('1.31.0');
+
+like(http_get('/uri-after-alias/found'),
+ qr!X-URI: /uri-after-alias/found.html!,
+ 'proxy without uri, alias');
+
+like(http_get('/uri-after-alias-redirect'),
+ qr!X-URI: /uri-after-alias/found.html!,
+ 'proxy without uri, alias, after redirect');
+
+}
+
+# when try_files adds an extension in a regex location with alias,
+# this used to result in bogus URI (".html") and the r->add_uri_to_alias
+# flag set; this was handled by ngx_http_map_uri_to_alias() and worked for
+# static files, but produced unexpected results when proxying
+
+TODO: {
+local $TODO = 'not yet' unless $t->has_version('1.31.0');
+
+like(http_get('/uri-after-alias-add/found'),
+ qr!X-URI: /uri-after-alias-add/found.html!,
+ 'proxy without uri, alias in regex location');
+
+like(http_get('/uri-after-alias-add-redirect'),
+ qr!X-URI: /uri-after-alias-add/found.html!,
+ 'proxy without uri, alias in regex location, after redirect');
+
+}
+
###############################################################################
More information about the nginx-devel
mailing list