官方文档地址:http://nginx.org/en/docs/http/request_processing.html
假设我们Nginx的配置如下
http {
server {
listen 80 ;
server_name www.wolfcode.cn default_server;
location ~* \.jsp {
proxy_pass 192.168.110.110:8080;
}
#匹配所有.jsp结尾的请求
location ~* \.jsp {
proxy_pass 192.168.110.110:8080;
}
#匹配所有以下结尾的请求
location ~ \.(gif|jpg|png|js|css)$ {
root static;
}
}
}
步骤:
- 根据IP访问Nginx所在服务器
- 匹配server配置中listen监听端口
- 匹配server_name,如果都匹配不上则使用默认server
- 默认server可以通过default_server 指定(这个参数是在 0.8.21 版本以后才有的,而之前是 default 指令)
- 如果没有指定为 default_server 的话,选用第一个作为默认,
- 相同listen端口的一组server都可以有一个default_server
- 可以通过配置定义匹配不到host值时怎么处理,示例:
server {
listen 80 default_server;
server_name _;
#444是Nginx自己的错误码,表示让Nginx断开与客户端连接
return 444;
}
- 匹配location
匹配方式
-
= 开头表示精确匹配
-
^~ 普通字符匹配 , 但是如果字符匹配到了就不再继续执行正则匹配 (普通的字符匹配完毕会记录最长的匹配记录,但是不会立刻选定, 而是继续进行正则匹配, 如果正则匹配符合就按照正则匹配执行) ,。
-
~ 开头表示区分大小写的正则匹配
-
~* 开头表示不区分大小写的正则匹配
-
!~和 !~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
-
/ 通用匹配,任何请求都会匹配到。
匹配规则
- 首先寻找精准匹配, 如果有则停止匹配
- 没有则匹配普通匹配 --> 如果有多个匹配 则记录最长匹配结果
- 匹配正则表达式 --> 如果有匹配-->立即返回, 如果没有-->返回普通匹配最长匹配结果
location 命中过程:
- 先判断精准命中,如果命中,则立即返回结果并结束解析过程
- 判断普通命中, 如果有多个命中,记录下来最长的命中结果(注意:是记录但并不结束,记录的是最长的命中)
- 继续判断正则表达式的解析结果,按配置里的正则表达式顺序为准,由上到下开始匹配,一旦匹配成功一个, 立即返回结果,并结束解析过程
网友评论