语法location [=|~|~*|^~] /uri/ {...}
上下文: server
此命令随URL 不同而接受不同的结构. 可以配置使用常规字符串和正则表达式. 若使用正则表达式, 则必须使用~*
前缀(选择不区分大小写的匹配) 或~
前缀(区分大小写的匹配)
=
表示uri
以某个常规字符串开头, 理解为匹配url 路径即可. nginx 不对url 做编码, 因此请求为/static/%20%/aa
可以被规则^~ /static/ /aa
(有空格) 匹配到.~
表示区分大小写的正则匹配~*
表示不区分大小写的正则匹配!~
和!~*
分别为区分大小写不匹配 和 不区分大小写不匹配 的正则/
通用匹配, 任何请求都会匹配到
多个location
配置的情况下, 匹配顺序为:
先匹配=
, 其次匹配^~
, 再匹配按文件中顺序的正则匹配, 最后匹配/
. 当有匹配成功的时候, 停止匹配, 按当前匹配规则处理请求.
例1:
1 | location = / { |
产生效果如下:
- 访问
/
根目录, 如http://localhost/
将匹配规则A - 访问
http://localhost/login
将匹配规则B;http://localhost/register
将匹配规则H - 访问
http://localhost/static/a.html
将匹配规则C - 访问
http://localhost/a.png
讲匹配规则D 和规则E, 但规则D 顺序优先, 规则E 不起作用 - 访问
http://localhost/static/c.png
优先匹配到规则C - 访问
http://localhost/a.PNG
将匹配规则E - 访问
http://localhost/a.xhtml
不会匹配到规则F 和规则G,http://localhost/a.XHTML
不会匹配到规则G - 访问
http://localhost/category/id/1111
匹配到规则H, 因为以上规则都不匹配, 这个时候应该是nginx 转发给后端应用服务器, 如FastCGI(php), tomcat(jsp), nginx 作为反向代理服务器存在.
所以实际使用中, 通常有至少三个匹配规则定义, 如下:
1 | # 第一个必选规则 直接匹配网站根, 通过域名访问网站首页比较频繁, 使用这个会加速处理; 这里直接转发给后端应用服务器了, 也可以是一个静态首页 |