Nginx基本原理简述

203 阅读2分钟
原文链接: mp.weixin.qq.com
点上方蓝字【哥说网事】快速关注

导读:本文将介绍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