[nginx-tests] Tests: try_files tests with proxying.
Maxim Dounin
mdounin at mdounin.ru
Sat Apr 25 05:48:22 UTC 2026
details: http://freenginx.org/hg/nginx-tests/rev/d384c458eae0
branches:
changeset: 2051:d384c458eae0
user: Maxim Dounin <mdounin at mdounin.ru>
date: Sat Apr 18 01:49:44 2026 +0300
description:
Tests: try_files tests with proxying.
Most notably, when URI is changed by try_files to something that does not
match the location prefix, the code tried to replace things anyway (and
caused a segfault if the URI set by try_files was shorter than the location
prefix).
diffstat:
http_try_files.t | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 61 insertions(+), 2 deletions(-)
diffs (94 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(18)
+my $t = Test::Nginx->new()->has(qw/http proxy rewrite/)->plan(23)
->write_file_expand('nginx.conf', <<'EOF');
%%TEST_GLOBALS%%
@@ -128,6 +128,32 @@ http {
set $file /alias-caseless/found.html;
try_files $file =404;
}
+
+ location /prefix-proxy/ {
+ try_files $uri =404;
+ proxy_pass http://127.0.0.1:8081/changed/;
+ }
+
+ location /prefix-proxy-alias/ {
+ alias %%TESTDIR%%/;
+ try_files $uri =404;
+ proxy_pass http://127.0.0.1:8081/changed/;
+
+ location /prefix-proxy-alias/nested-short {
+ try_files /prefix-proxy-alias/nested =404;
+ proxy_pass http://127.0.0.1:8081/changed/;
+ }
+ }
+
+ location /prefix-proxy-long/ {
+ try_files /prefix-proxy/found.html =404;
+ proxy_pass http://127.0.0.1:8081/changed/;
+ }
+
+ location /prefix-proxy-short/ {
+ try_files /found.html =404;
+ proxy_pass http://127.0.0.1:8081/changed/;
+ }
}
server {
@@ -143,9 +169,12 @@ http {
EOF
+$t->write_file('found.html', 'SEE THIS');
+$t->write_file('nested', 'SEE THIS');
mkdir($t->testdir() . '/directory');
$t->write_file('directory/alias-re.html', 'SEE THIS');
-$t->write_file('found.html', 'SEE THIS');
+mkdir($t->testdir() . '/prefix-proxy/');
+$t->write_file('prefix-proxy/found.html', 'SEE THIS');
$t->run();
###############################################################################
@@ -221,4 +250,34 @@ like(http_get('/alias-CASELESS/found.htm
}
+# when an URI is changed by try_files, this could be a surprise
+# for proxy_pass with URI part
+
+like(http_get('/prefix-proxy/found.html'), qr!X-URI: /changed/found.html!,
+ 'proxy after try_files');
+like(http_get('/prefix-proxy-alias/found.html'),
+ qr!X-URI: /changed/found.html!, 'proxy after try_files with alias');
+
+TODO: {
+local $TODO = 'not yet' unless $t->has_version('1.31.0');
+
+like(http_get('/prefix-proxy-long/found.html'),
+ qr!X-URI: /prefix-proxy/found.html!, 'proxy after try_files no match');
+
+}
+
+TODO: {
+todo_skip 'leaves coredump', 2
+ unless $t->has_version('1.31.0') or $ENV{TEST_NGINX_UNSAFE};
+local $TODO = 'not yet', $t->todo_alerts()
+ unless $t->has_version('1.31.0');
+
+like(http_get('/prefix-proxy-short/foo'), qr!X-URI: /found.html!,
+ 'proxy after try_files with short uri');
+like(http_get('/prefix-proxy-alias/nested-short'),
+ qr!X-URI: /prefix-proxy-alias/nested!,
+ 'proxy after try_files with short uri, alias nested');
+
+}
+
###############################################################################
More information about the nginx-devel
mailing list