Location 是 Nginx 中一个非常核心的配置,关于Location,举个简单的配置例子:,当访问 http://10.0.7.115:80
的时候,返回的是 /data/app/index.html
文件。,Location具体语法:,重点看方括号中的 [ = | ~ | ~* | ^~ ]
,其中 |
分隔的内容表示你可能会用到的语法,其中:,=
表示精确匹配:,例如:,~
表示区分大小写的正则匹配:,例如:,~*
表示不区分大小写的正则匹配:,例如:,^~
表示 uri 以某个字符串开头:,例如:,/
表示通用匹配:,例如:,例如:,Location的定义分为两种:,当存在多个 Location 的时候,匹配的顺序为:,检查使用前缀字符串的 locations
,在使用前缀字符串的 locations
中选择最长匹配的,并将结果进行储存;,总结:,在顺序上:,在 优先级上:,我们举几个简单的例子进行说明,请求URI如下:,示例一:,配置:,匹配结果:,注:虽然 /doc
也能匹配到,但 在顺序上,前缀字符串顺序不重要,按照匹配长度来确定。,示例二:,匹配结果:,注:虽然 ~ ^/docu
也能匹配到,但 正则表达式则按照定义顺序。,示例三:,匹配结果:,注:虽然 ~ ^/docu
也能匹配到,但 ^~
的 优先级更高
。,示例四:,匹配结果:,注:虽然 /document
也能匹配到,但 正则的优先级更高。,当我们这样设置 root
的时候:,当请求 /i/top.gif
,/data/w3/i/top.gif
会被返回。,当我们这样设置 alias
的时候:,当请求 /i/top.gif
,/data/w3/images/top.gif
会被返回。,两者的区别:,server 和 location 中都可以使用 root,举个例子:,如果两者都出现,是怎样的优先级呢?,简单的来说,就是 就近原则
,如果 location
中能匹配到,就是用 location
中的 root
配置,忽略 server
中的 root
,当 location
中匹配不到的时候,则使用 server
中的 root
配置。,