Web架构之Nginx try_files

Posted jasonminghao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web架构之Nginx try_files相关的知识,希望对你有一定的参考价值。

try_files

nginxtry_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;
 }

以上是关于Web架构之Nginx try_files的主要内容,如果未能解决你的问题,请参考以下文章

nginx 指令之 try_files

Nginx之try_files指令

nginx;如果仅使用 try_files 存在文件,则返回响应代码

nginx process = 404 如何在try_files中回退

Nginx try_files 不工作正则表达式

同一个域名,Nginx可以根据目录指定到不同网站吗