我试图了解nginx的try_files指令是如何工作的.nginx正在我的服务器上运行并提供位于的默认页面/usr/share/nginx/html/index.html.
但是,我有一个简单的html页面位于文件系统中/var/www/test/index.html.以下配置文件未导致该文件被提供.我想理解为什么不这样做,以及我需要做出哪些改变才能实现.
这是defualt.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;
}
Run Code Online (Sandbox Code Playgroud)
Moh*_*ady 176
一个非常常见的try_files行,可以应用于你的条件是
location / {
try_files $uri $uri/ /test/index.html;
}
Run Code Online (Sandbox Code Playgroud)
您可能理解第一部分,location /匹配所有位置,除非它与更具体的位置相匹配location /test,例如
第二部分(the try_files)表示当您收到与此块匹配的URI时$uri首先尝试,例如http://example.com/images/image.jpgnginx将尝试检查是否存在/images调用的文件,image.jpg如果发现它将首先提供它.
第二个条件是$uri/这意味着如果你没有找到第一个条件$uri尝试将URI作为目录,例如http://example.com/images/,ngixn将首先检查一个名为imagesexists 的文件是否存在然后它找不到它,然后进行第二次检查$uri/,看看是否有一个目录调用images存在然后它将尝试服务它.
旁注:如果你没有,autoindex on你可能会收到403禁止错误,因为默认情况下禁止目录列表.
编辑:我忘了提到,如果你已经
index定义,nginx将尝试在尝试目录列表之前检查该文件夹中是否存在索引.
第三个条件/test/index.html被认为是一个后退选项,(你需要使用至少2个选项,一个和一个后退),你可以尽可能多地使用(之前从未读过收缩),nginx会在index.html里面查找文件文件夹test,如果存在则提供服务.
如果第三个条件也失败,则nginx将提供404错误页面.
还有一些叫做命名的位置,就像这样
location @error {
}
Run Code Online (Sandbox Code Playgroud)
你可以把它try_files像这样
try_files $uri $uri/ @error;
Run Code Online (Sandbox Code Playgroud)
提示:如果您只想提供1个条件,例如内部文件夹,images您只想提供图像或转到404错误,您可以写一个像这样的行
location /images {
try_files $uri =404;
}
Run Code Online (Sandbox Code Playgroud)
这意味着要么提供文件服务,要么提供404错误,你不能只$uri使用它自己,=404因为你需要有一个后备选项.
您还可以选择所需的错误代码,例如:
location /images {
try_files $uri =403;
}
Run Code Online (Sandbox Code Playgroud)
如果图像不存在,这将显示禁止的错误,或者如果您使用500,它将显示服务器错误等.
| 归档时间: |
|
| 查看次数: |
96479 次 |
| 最近记录: |