【Nginx的前端配置try_files用法解释(使用alias配置代理)】

try_files

 - 语法:try_files file … uri;或 try_files file … = code;
 - 作用域:server location
 - 语法解释:
官方:Checks the existence of files in the specified order and uses the first found file for request processing; the processing is performed in the current context. The path to a file is constructed from the *file*parameter according to the root and alias directives. It is possible to check directory’s existence by specifying a slash at the end of a name, e.g. “$uri/”. If none of the files were found, an internal redirect to the *uri* specified in the last parameter is made.
 - 翻译:
首先:按照指定的顺序检查文件是否存在,并使用第一个找到的文件进行请求处理
其次:处理是在当前上下文中执行的。根据 root 和 alias 指令从 file 参数构造文件路径。
然后:可以通过在名称末尾指定一个斜杠来检查目录的存在,例如“ $uri/”。
最后:如果没有找到任何文件,则进行内部重定向到最后一个参数中指定的 uri。
自己理解的:按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾不加斜杠是文件,结尾加斜杠表示文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数(最后一个参数会先和其他参数一样,当做文件或者文件夹查找过一次;查找不到,才会重定向到这个参数)

 - 举例说明:
示例一、
location /screen {
    alias /app/screen;
    index index.html index.htm;
    try_files $uri $uri/ /screen;
}
解释配置:
alias:ip/screen访问代理到ip/app/screen
index:设置目录的默认文件为 index.html 、index.htm
try_files:设置文件查找规则为 $uri $uri/ /screen。即3个规则,先从$uri 查找文件,再从$uri/ 目录中查找,再查找 /app/screen/screen文件,最后内部重定向到/screen。

例子:根据上面的配置,当请求 http://ip/screen/ai 时,

查找逻辑:

  1. 找文件找不到
  2. 找文件夹找不到
  3. 找文件/screen找不到
  4. test location匹配到路由,重定向到/screen
  5. 找/screen文件找不到
  6. 找/screen文件夹找到了,但是它作为后面http资源,不是个目录,不能打开文件index.html
  7. 301永久重定向到/screen,舍弃body资源
  8. 重新请求http://ip/screen,请求头的accept默认有个“/”,所以会重新请求到http://ip/screen/
  9. 找/screen/文件找不到
  10. 找/screen/文件夹找到了,打开默认文件index.html,显示首页

结果:刷新到了首页

示例二、
location /screen {
    alias /app/screen;
    index index.html index.htm;
    try_files $uri $uri/ /screen/;
}
解释配置:
alias:ip/screen访问代理到ip/app/screen
index:设置目录的默认文件为 index.html 、index.htm
try_files:设置文件查找规则为 $uri $uri/ /screen/。即3个规则,先从 $uri 查找文件,再从 $uri/ 目录中查找,再查找 /app/screen/文件夹,最后内部重定向到/screen/。

例子:根据上面的配置,当请求 http://ip/screen/ai 时,$uri 为 /app/screen/ai文件。当前try_file 具体为:/app/screen/ai文件、/app/screen/ai/文件夹、/app/screen/文件夹,最后内部重定向到/screen/。

查找逻辑:

  1. 找/screen/ai文件找不到
  2. 找/screen/ai文件夹找不到
  3. 找文件夹/screen/screen/找不到
  4. test location匹配到路由,重定向到/screen/
  5. 找/screen/文件找不到
  6. 找/screen/文件夹找到了,打开默认文件index.html,body资源还在,显示当前页面

结果:刷新到了当前页面

 - 实际项目:使用示例一的配置,访问被重定向到了/screen;使用示例二的配置,下钻页面能正常在当前页面刷新。
 - 后续:在NGINX里配置debug日志,查看nginx具体的工作逻辑,截图;编写的忘了保存,全废了,气死;后面在写个怎么配置debug日志的博客。
 

你可能感兴趣的:(nginx,前端,linux)