Nginx try_files 不工作正则表达式

Posted

技术标签:

【中文标题】Nginx try_files 不工作正则表达式【英文标题】:Nginx try_files not working regexp 【发布时间】:2018-04-01 20:54:40 【问题描述】:

我在我的 nginx 配置文件中创建了一个位置:

location ~* ^/resize/(.*)/(\d+)/(\d+)/(.*)\.(jpeg|jpg|png|gif)$ 
    try_files /var/image-gallery/php/web/assert/$1/$4_$2_$3.$5 /resize.php?storage=$1&width=$2&height=$3&file=$4&ext=$5;

如果文件存在,我希望 nginx 返回它。否则我想运行一个脚本,它应该最终流式传输文件内容。

HTTP 请求示例:http://host:8000/resize/storage3/100/100/28f686ecb64bbb0c90d824a4be08a1e9.jpeg

文件位置:

$ file /var/image-gallery/php/web/assert/storage3/28f686ecb64bbb0c90d824a4be08a1e9_100_100.jpeg
/var/image-gallery/php/web/assert/storage3/28f686ecb64bbb0c90d824a4be08a1e9_100_100.jpeg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 100x100, frames 3

为什么 nginx 看不到磁盘上的文件?

【问题讨论】:

你能不能也给我们看看 nginx 日志? @IvanVelichko,看看我的回答:) 【参考方案1】:

解决了! Nginx 不使用绝对路径。

修复:

location ~* ^/resize/(.*)/(\d+)/(\d+)/(.*)\.(jpeg|jpg|png|gif)$ 
   root /var/image-gallery/php/web/assert;
   try_files /$1/$4_$2_$3.$5 /resize.php?storage=$1&width=$2&height=$3&file=$4&ext=$5;

【讨论】:

以上是关于Nginx try_files 不工作正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Nginx alias root 和 try_files 基本使用

使用 Nginx 使用 try_files 将所有对不存在文件的请求重写为 index.php

nginx配置—之location模式匹配

常用的正则表达式

nginx中的location匹配规则介绍

nginx:proxy_pass失败时回退到try_files需要不寻常的配置