nginx的try_files基本是nginx配置中必定用到的一个命令,但如果没有深入了解,也许你就只知道默认配置文件中的那行代码,就是尝试请求一下uri,然后如果没有找到就转到程序框架的入口文件上。try_files的作用域在server、location,其语法如下:本文地址:http://www.04007.cn/article/787.html,未经许可,不得转载.
#语法1,一直寻找文件,找不到定义的uri上。 try_files file ... uri #语法2,一直寻找文件,找不到就返回一个状态码 try_files file ... = code #示例 index index.html index.php; try_files $uri /cache/ /data/files/ $uri /app.php; try_files $uri /cache/ /data/files/ $uri =404;
本文地址:http://www.04007.cn/article/787.html,未经许可,不得转载.
如上示例中,我们向服务端发送一个请求拿程序生成的一个图片/makejpg/102.jpg,它将先检查WEB目录 下/makejpg/102.jpg图片文件是否存在 ,如果不存在检测设定的root下/cache/makejpg/102.jpg 之后没有再请求root下 /data/files/makejpg/102.jpg ,最后没有的话就去请求/app.php去生成102.jpg这么一张图片。下面一个请求如果是静态服务器则没找到就直接返回404了。本文地址:http://www.04007.cn/article/787.html,未经许可,不得转载.
try_files除了上述在此服务器寻找文件以及找到请求处理之外,也可以直接重定向其它的location,其它的location就可以自由配置处理了,甚至可以转发到upstream请求,纯缓存服务器配置这种比较合适,即所有的数据都是后端生成的,经过一次就缓存下来,如果缓存失效就去后端拿数据。有点CDN的感觉。本文地址:http://www.04007.cn/article/787.html,未经许可,不得转载.
location ^~ /images/ { root /image/cache/; try_files $uri @image_backend; } location @image_backend { proxy_pass http://192.168.1.10:80; }
本文地址:http://www.04007.cn/article/787.html,未经许可,不得转载.
最后上面提到的try_files查找路径的事情,nginx中对路径的指令有root和alias,root会持续继成,在location中匹配后,会将匹配的location中的root路径替换访问url的host从而得到文件的真实地址。而alise它不会替换匹配后的url地址,而是替换匹配部分的url。alias指令也可以有多个,有些配置中使用alias会省不少事,示例如下:本文地址:http://www.04007.cn/article/787.html,未经许可,不得转载.
#请求http://www.04007.cn/mobile/index.php -> /home/wwwroot/mobile/index.php location /mobile/ { root /home/wwwroot/ } #请求http://www.04007.cn/mobile/index.php -> /home/wwwroot/mobile/index.php location /mobile/ { alias /home/wwwroot/mobile/ }本文地址:http://www.04007.cn/article/787.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/787.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |