我有以下代码示例:
events {}
http {
include mime.types;
server {
listen 80;
server_name 172.16.239.128;
root /sites/demo;
try_files $uri /cat.png /greet /friendly_404;
location /friendly_404 {
return 404 "Sorry, that file could not be found.";
}
location /greet {
return 200 "Hello User";
}
}
}
和
http {
include mime.types;
server {
listen 80;
server_name 172.16.239.128;
root /sites/demo;
try_files $uri /cat.png /greet @friendly_404;
location @friendly_404 {
return 404 "Sorry, that file could not be found.";
}
location /greet {
return 200 "Hello User";
}
}
}
在第一种情况下,我们使用最后一个参数执行try_files,这被认为是重写权限吗?这意味着我们要使用新的uri /friendly_404
重新读取文件,以便正确找到位置?
在第二种情况下,我们使用命名位置,例如,它像bash中的go to
一样起作用?对吧?
那么最好使用第二种情况以免重新加载所有文件?
我不确定我所说的话是否正确,经过长时间的网上调查,这是我的结论。
答案 0 :(得分:0)
在try_files ... /uri;
的情况下,如果所有 file 词都不匹配,它将执行内部重写,这意味着$uri
的值被更改,Nginx重新启动搜索location
来处理请求。
对于try_files ... @name;
,如果所有 file 词都不匹配,则选择命名的location
来处理请求。 $uri
的值保持不变。
在一个简单的测试场景中,两者之间可能没有什么区别。
那么最好使用第二种情况以免重新加载所有文件?
在两种情况下,这些过程都是Nginx的内部过程,并且不涉及外部重定向。有关详细信息,请参见this document。