如何使这个 try_files 指令工作?

我试图理解 Nginx 的 Try _ files指令是如何工作的。Nginx 运行在我的服务器上,提供位于 /usr/share/nginx/html/index.html的默认页面。

但是,在 /var/www/test/index.html的文件系统中有一个简单的 HTML 页面。下面的配置文件不会导致该文件被服务。我想知道为什么不,以及我需要做出什么改变,才能使它得到服务。

以下是 default.conf的相关部分:

server {
listen       80;
server_name  localhost;


root  /var/www;
try_files /test/index.html /;


location / {
root   /usr/share/nginx/html;
index  index.html index.htm;
}
144043 次浏览

一个非常常见的 try _ files 行可以应用于您的条件

location / {
try_files $uri $uri/ /test/index.html;
}

你可能理解第一部分,location /匹配所有的位置,除非它是由一个更具体的位置匹配,如 location /test的例子

第二部分(try_files)意味着当您收到一个与这个块匹配的 URI 时,首先尝试 $uri,例如 http://example.com/images/image.jpg nginx 将尝试检查 /images中是否有一个名为 image.jpg的文件,如果找到它将首先服务它。

第二个条件是 $uri/,这意味着如果你没有找到第一个条件 $uri尝试 URI 作为一个目录,例如 http://example.com/images/,ngixn 将首先检查一个名为 images的文件是否存在,然后它不会找到它,然后去第二个检查 $uri/,看看是否有一个名为 images的目录存在,然后它将尝试服务它。

边注 : 如果您没有 autoindex on,您可能会得到一个403禁止错误,因为默认情况下目录列表是禁止的

编辑 : 我忘了提到,如果定义了 index,nginx 将尝试检查索引是否存在于此文件夹之前 尝试目录列表。

第三个条件 /test/index.html被认为是一个后退选项,(你需要使用至少2个选项,一个和一个后退) ,你可以使用尽可能多的你可以(从来没有读取一个限制之前) ,nginx 将寻找文件 index.html内的文件 test和服务,如果它存在。

如果第三个条件也失败,那么 nginx 将提供404错误页面。

还有一种叫做地点的东西,像这样

location @error {
}

你可以像这样用 try_files调用它

try_files $uri $uri/ @error;

提示 : 如果你只有一个条件需要服务,比如在文件夹 images中,你只需要服务图像或者转到404错误,你可以写一行这样的代码

location /images {
try_files $uri =404;
}

这意味着要么服务文件,要么服务404错误,没有 =404,您不能只使用 $uri,因为您需要一个备用选项。
您还可以选择您想要的任何错误代码,例如:

location /images {
try_files $uri =403;
}

这将显示一个禁止的错误,如果图像不存在,或者如果您使用500它将显示服务器错误等。.