1. root
语法:root path
配置段:http、server、location、if
root的处理结果是:root路径+location路径
location /t/ {
root /www/root/html/;
}
请求的URI是/t/a.html
时,web服务器将会返回服务器上的/www/root/html/t/a.html
的文件。
2.alias
语法:alias path
配置段:location
alias的处理结果是:使用alias路径替换location路径
alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无
location /t/ {
alias /www/root/html/new_t/;
}
请求的URI是/t/a.html
时,web服务器将会返回服务器上的/www/root/html/new_t/a.html
的文件。
3.try_files
语法:try_files 文件路径... 重写的uri
配置段:server location
- try_files后面至少要有一个文件路径一个重写uri。
- 查找路径是按照给定的root或alias为根路径来查找的;
- 如果给出的file都没有匹配到,则会进行一个内部重定向到最后一个参数给定的uri,就是新的location匹配;
- 最后一个参数是回退URI且必须存在,否则会出现内部500错误;
location / {
root /data/dist;
try_files $uri $uri/ /index.html
expires 7d; # expires 是nginx控制缓存的一种方式,7d=7天。
}
访问http://localhost/example?a=1
时$uri
为/example
,$request_uri
包括URI参数为/example?a=1
,处理顺序是:
$uri
是指/example
文件, 会先找root
目录/data/dist
下的/example
文件,也就是/data/dist/example
这个文件,找到直接返回。$uri/
也就是/example/
目录,找不到再尝试找/data/dist/example/
目录下的index开头的文件,找到直接返回。- 如果前面文件都没匹配找到,就会 fallback 到 try_files 的最后一个选项
/index.html
,发起一个内部 “子请求”,也就是相当于 nginx 发起一个 HTTP 请求到http://localhost/index.html
。重新匹配location。这里注意如果匹配的还是同一个location,找不到文件的话可能出现无限循环,导致错误500的出现。
location / {
try_files /app/cache/ $uri @fallback;
index index.php index.html;
}
location @fallback {
rewrite ^/(.*)$ http://www.baidu.com # 跳转到百度,和try_files最后一个参数作用相同。
}
匹配不到的话,重定向到 @fallback,然后重写到百度。
参考
nginx学习教程:
https://wizardforcel.gitbooks.io/nginx-doc/content/Text/7.1_fullexample.html
https://openresty.org/download/agentzh-nginx-tutorials-zhcn.html
lua学习教程:
https://www.runoob.com/lua/lua-tutorial.html
openresty学习教程:
https://openresty.org/cn/ebooks.html