Nginx的location配置
前言
location
匹配到的url
可以执行特定的操作, 比如拦截, 转发。
url匹配
语法:location [=|~|~*|^~|@] uri { 配置 }
location
的url
匹配遵循最长匹配原则。
modifier | 说明 |
---|---|
= | 精确匹配, 和这个url 完全一样的会被匹配到 |
^~ | 前缀匹配, 以这个url 开头都会被匹配到 |
~ | 表示执行一个正则匹配,区分大小写 |
~* | 表示执行一个正则匹配,不区分大小写 |
什么都没有, 就说明以这个uri 开头的都会被匹配到 |
|
@ | “@” 定义一个命名的 location,使用在内部定向时使用,例如 error_page, try_files |
匹配步骤:
- 将所有的非正则匹配规则放入排序三叉树中, 正则匹配规则放入一个顺序队列(按配置文件书写顺序排序)中。
- 在三叉树中匹配
url
。如果匹配到location =
就停止搜索。如果是前缀匹配location ^~
或默认规则location
则找到最长匹配。 - 再在正则匹配规则队列中匹配
url
, 如果有, 则使用这个正则匹配, 没有则使用三叉树中找到的匹配规则。
示例
上面说这么多, 还是得看例子来理解, 等看完例子再回过头去看上面的详细说明。
nginx-location-match-visible提供了一个可视化的匹配步骤。
将下面规则复制到其中, 即可查看匹配步骤和匹配结果。
= 和 none 的区别
匹配规则
1 | location / {} # A |
测试用例
1 | / # 匹配B |
~ 正则(区分大小写)
匹配规则
1 | location / {} # A |
测试用例
1 | / # 匹配A |
~ 正则(不区分大小写)
匹配规则
1 | location / {} # A |
测试用例
1 | / # 匹配A |
@
@
常用于内部跳转
1 | location ~* \.(gif|jpg|png|js|css)$ { |
复合
匹配规则
1 | location = / {} # A |
测试用例
1 | / # 匹配F |
最佳实践
一般把Nginx
作为负载均衡服务器, 静态资源可以存在Nginx
服务器。
负载均衡配置本文不详细讲, 简单的说就像是买卖房屋的中介, 给你(客户端)介绍一个好的(连接的上的)房屋(服务端)。
1 | http { |