点上方蓝字【哥说网事】快速关注

导读:本文将介绍nginx的转发优先级,proxy_pass的转发规则,以及https协议的转发配置。
一、location的语法规则
location [=|~|~*|^~] /uri/ { … }
| 规则 | 模式 | 含义 |
|---|---|---|
| A | = 开头 | 表示精确匹配 |
| B | ^~ 开头 | 表示uri以某个常规字符串开头,理解为匹配 url路径即可,nginx不对url做编码 |
| C | ~ 开头 | 表示区分大小写的正则匹配 |
| D | ~* 开头 | 表示不区分大小写的正则匹配 |
| E | !~和!~* | 分别为区分大小写不匹配及不区分大小写不匹配 的正则 |
| F | / 通用匹配 | 任何请求都会匹配到 |
location = / { #规则A}location = /login { #规则A}location ^~ /static/ { #规则B}location ~ \.(gif|jpg|png|js|css)$ { #规则C}location ~* \.png$ { #规则D}location !~ \.xhtml$ { #规则E}location !~* \.xhtml$ { #规则E}location / { #规则F}
二、优先级
nginx配置中,有多条location的配置,转发优先级按如下规则进行:
-
相同类型的表达式,字符串长的会优先匹配。
-
等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。
-
^~类型表达式。一旦匹配成功,则不再查找其他匹配项。
-
正则表达式类型(~ ~*)的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。
-
常规字符串匹配类型。按前缀匹配。
三、proxy_pass规则详解
假设下面四种情况,访问路径是:http://192.168.1.1/proxy/test.html 。
第一种:
location /proxy/ { proxy_pass http://127.0.0.1/;}
代理到URL:http://127.0.0.1/test.html
第二种(相对于第一种,最后少一个 / )
location /proxy/ { proxy_pass http://127.0.0.1;}
代理到URL:http://127.0.0.1/proxy/test.html
第三种:
location /proxy/ { proxy_pass http://127.0.0.1/aaa/;}
代理到URL:http://127.0.0.1/aaa/test.html
第四种(相对于第三种,最后少一个 / )
location /proxy/ { proxy_pass http://127.0.0.1/aaa;}
代理到URL:http://127.0.0.1/aaatest.html
四、nginx遇到下列情形会进行转发
-
用户在浏览器地址栏直接输入
-
代码中的href、src、服务端的重定向redirect
-
前端代码中的ajax请求url
【关于小哥】

某知名互联网企业技术总监
技术专家、华为公司高级工程师
擅长技术、项目以及团队管理
微信:13677335445