Nginx bug when mixing map and try_files ?
Francis Daly
francis at daoine.org
Wed Oct 7 18:08:36 UTC 2020
On Wed, Oct 07, 2020 at 06:50:30PM +0200, Marcin Wanat wrote:
Hi there,
> i am doing simple webp client support check using map and then using
> try_files to check if file exists and serve it.
$1 may not mean what you want it to mean, when more than one regex-thing
is involved. And "map" can be a regex-thing.
> location ~ ^/imgs/([0-9]*)/(.*)$ {
> add_header X-webp $webp_suffix;
> try_files /imgs/$1$webp_suffix
> /imgs/$1.jpg =404;
> }
If you change the location regex to whatever your engine's version of
"save this in a named variable" is, then use that named variable in the
try_files line, you may have better luck.
Perhaps:
location ~ ^/imgs/(?P<numbers>[0-9]*)/(.*)$ {
and use $numbers instead of $1.
> What am i missing ?
>
> 1) Why it does not serve .webp file at all ?
> 2) Why when try_files has webp check on first position it DO NOT serve .jpg
> file but 404 and when i swap order of parameters i DO serve .jpg ?
When nginx needs to know the value of $webp_suffix, the "map" is used,
which messes with your $1.
Then when nginx substitutes in the value of $1, it is not what it was
from the regex location.
So it all Just Works when $webp_suffix does not need to be read.
f
--
Francis Daly francis at daoine.org
More information about the nginx
mailing list