try_files
Nginx的try_files
按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数,只有最后一个参数可以引起一个内部重定向。之前的参数只设置内部的URI指向,最后一个参数是回退的URI且必须存在,否则将会出现内部500错误
try_files格式:
location / {
try_files $uri $uri/ /index.php;
}
#1.检查用户请求的uri内容是否存在当前本地磁盘,存在则解析
#2.将请求加/,类似于重定向处理
#3.前两者匹配不到,最后交给index.php处理
简单实现
1.环境准备
$ echo "Try-Page" > /data/www/index.html
2.配置nginx的try_file
$ cat /etc/nginx/conf.d/try_files.conf
server {
listen 80;
server_name www.hhjy.org;
root /data/www/;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
3.测试
$ curl www.hhjy.com/cache/xx1.html
Try-Page // 返回的是index.html的内容
// 访问流程
curl www.hhjy.com/cache/xx1.html
首先nginx会在该虚拟主机root关键字所定义的路径/data/www下查找cache/xxindex.ht,
如果该文件不存在,则会返回/data/www/index.html
示例
示例一:跳转到指定后端
server {
listen 80;
server_name 10.4.7.7;
root /data/code;
index index.html;
location / {
try_files /a.html /b.html @java_page; # 检查文件a.html、b.html,如果存在则正常显示,不存在就去查找@java_page的值。
}
location @java_page {
proxy_pass http://172.16.1.7:8080; # 转发到 172.16.1.7:8080
}
}
实例二:跳转到指定文件
server {
listen 80;
server_name 10.4.7.7;
root /data/code;
index index.html;
location /abc {
try_files /a.html /b.html /c.html;
}