目录

一、Nginx常见模块

二、常用的Nginx正则表达式

三、local概述

3.1 local分类

3.2 local 常用的匹配规则

3.3 local 优先级

3.4 location 示例

优先级总结:

四、rewrite概述

4.1 rewrite简介

4.2 Rewrite跳转场景主要包括以下几种:

4.3 rewrite和location区别

4.4 rewrite 执行顺序

4.5 语法格式:

4.6 Rewrite 示例

4.6.1 基于旧域名跳转到新域名后面加目录

4.6.2 基于客户端IP访问跳转

问题:

五、总结


一、Nginx常见模块

  • http
    http块是Nginx服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这模块中。作用包括:文件引入、MIME-Type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接请求数上限等。

  • server
    server块,虚拟主机(虚拟服务器)。作用:使得Nginx服务器可以在同一台服务器上只要运行一组Nginx进程,就可以运行多个网站。

  • location
    location块是server块的一个指令。作用:基于Nginx服务器接收到的请求字符串,虚拟主机名称(ip,域名)、url匹配,对特定请求进行处理。

二、常用的Nginx正则表达式

^ 匹配输入字符串的起始位置
$ 匹配输入字符串的结束位置
* 匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+ 匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
? 匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
. 匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式
\ 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“$”则匹配“$”
\d 匹配纯数字
{n} 重复 n 次
{n,} 重复 n 次或更多次
{n,m} 重复 n 到 m 次
[] 定义匹配的字符范围
[c] 匹配单个字符 c
[a-z] 匹配 a-z 小写字母的任意一个
[a-zA-Z0-9] 匹配所有大小写字母或数字
() 表达式的开始和结束位置
I 或运算符

三、local概述

3.1 local分类

精准匹配:location = / {…}
一般匹配:location / {…}
正则匹配:location ~ / {…}

3.2 local 常用的匹配规则

= 进行普通字符精确匹配,也就是完全匹配
^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location。
~ 区分大小写的匹配。
~* 不区分大小写的匹配。
!~ 区分大小写的匹配取非。【!:表示取反】
!~* 不区分大小写的匹配取非。
@ 定义一个命名的location,使用在内部定向时

3.3 local 优先级

首先精确匹配 =
其次前缀匹配 ^~
其次是按文件中顺序的正则匹配 或*
然后匹配不带任何修饰的前缀匹配
最后是交给 / 通用匹配

location = / {[ configuration A ]
}location / {[ configuration B ]
}location /documents/ {[ configuration C ]
}location ^~ /images/ {[ configuration D ]
}location ~* \.(gif|jpg|jpeg)$ {[ configuration E ]
}

3.4 location 示例

(1)location = / {}
=为精确匹配 / ,主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配
再比如 location = /abc,则只匹配/abc ,/abc/或 /abcd不匹配。若 location  /abc,则即匹配/abc 、/abcd/ 同时也匹配 /abc/。

(2)location / {}
因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配, /data 也匹配,
但若后面是正则表达式会和最长字符串优先匹配(最长匹配)

(3)location /documents/ {}
匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条

(4)location /documents/abc {}
匹配任何以 /documents/abc 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条

(5)location ^~ /images/ {}
匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条

(6)location ~* \.(gif|jpg|jpeg)$ {}
匹配所有以 gif、jpg或jpeg 结尾的请求
然而,所有请求 /images/ 下的图片会被 location ^~ /images/ 处理,因为 ^~ 的优先级更高,所以到达不了这一条正则

(7)location /images/abc {}
最长字符匹配到 /images/abc,优先级最低,继续往下搜索其它 location,会发现 ^~ 和 ~ 存在

(8)location ~ /images/abc {}
匹配以/images/abc 开头的,优先级次之,只有去掉 location ^~ /images/ 才会采用这一条

(9)location /images/abc/1.html {}
匹配/images/abc/1.html 文件,如果和正则location ~ /images/abc/1.html 相比,正则优先级更高

优先级总结:

(location = 完整路径) > (location ^~ 路径) > (location ,* 正则顺序) > (location 部分起始路径) > (location /)

#第一个必选规则
直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。
可以是一个静态首页,也可以直接转发给后端应用服务器
location = / {root   html;index  index.html index.htm;
}#第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {root /webroot/static/;
}location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {root /webroot/res/;
}#第三个规则就是通用规则,比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器
非静态文件请求就默认是动态请求
location / {proxy_pass http://tomcat_server;
}

四、rewrite概述

4.1 rewrite简介

rewrite 只能在
server {}
location {}
if {}
中,并且默认只能对域名后边的除去传递的参数外的字符串起作用
例如:
http://www.zzh.com/abc/bbs/index.html?a=1&b=2 只针对/abc/bbs/index.html重写

4.2 Rewrite跳转场景主要包括以下几种:

  • 可以调整用户浏览的 URL,看起来更规范,合乎开发及产品人员的需求

  • 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态 URL 地址伪装成静态地址提供服务。

  • 网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的 360buy.com会跳转到 jd.com

  • 根据特殊变量、目录、客户端的信息进行 URL 调整等。

4.3 rewrite和location区别

从功能看rewrite和location似乎有点像,都能实现跳转,主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,还可以proxy_pass到其他机器。

4.4 rewrite 执行顺序

(1) 执行 server 块里面的 rewrite 指令。
(2) 执行 location 匹配。
(3) 执行选定的 location中的 rewrite 指令。

4.5 语法格式:

rewrite 《regex》 《replacement》 [flag];
regex :表示正则匹配规则。
replacement :表示跳转后的内容。 flag :表示 rewrite 支持的 flag 标记。

###flag标记说明###

last :本条规则匹配完成后,继续向下匹配新的。location URL规则,一般用在 server 和 if 中。
break :本条规则匹配完成即终止,不再匹配后面的任何规则,一般使用在 location 中。
redirect :返回302临时重定向,浏览器地址会显示跳转后的URL地址。
permanent :返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。

4.6 Rewrite 示例

4.6.1 基于旧域名跳转到新域名后面加目录

设置新的访问页面

4.6.2 基于客户端IP访问跳转

所有IP访问任何内容都显示一个固定的维护页面,只有固定的IP192.168.100.2访问正常。

删除上一个测试的内容

问题:

如果页面出现乱码是中文字符集没有取消注释或者页面命令没有写好

加上如图所示:

五、总结

本章主要讲了正则表达式、location匹配和rewrite重写。从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理,还可以proxy_pass到其他机器。

Nginx rewrite ——重写跳转相关推荐

  1. Nginx的location匹配与rewrite重写跳转

    目录 Nginx的location匹配与rewrite重写跳转 一.常用的Nginx正则表达式 二.location 分类 location常用的匹配规则 优先级 location示例说明 Rewri ...

  2. 常用nginx rewrite重定向-跳转实例

    常用nginx rewrite重定向-跳转实例: 1,将www.myweb.com/connect 跳转到connect.myweb.com rewrite ^/connect$ http://con ...

  3. web服务之Nginx中的location匹配与rewrite重写跳转

    文章目录 常见的Nginx正则表达式 location location分为三类 location常用的匹配规则 location 优先级 location 示例说明 三个匹配规则定义 rewrite ...

  4. nginx rewrite重写与防盗链配置

    nginx rewrite重写规则与防盗链配置方法 时间:2016-02-04 15:16:58来源:网络 导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标 ...

  5. Nginx Rewrite重写

    Rewrite基本概述 什么是Rewrite Rewrite主要实现url地址重写,以及重定向,就是把传入Web的请求重定向到其他URL的过程. Rewrite使用场景 地址跳转,用户访问www.na ...

  6. nginx rewrite重写uri

    1.根据ip地址转发并重写uri location /cms/v35 {if ($remote_addr ~ "210.12.41.66"){rewrite ^/cms/v35/( ...

  7. Nginx URL重写(rewrite)配置及信息详解

    URL重写有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中 Nginx URL重写(rewrite)介绍 和apache等web服务软件一样,rewrite的组要功 ...

  8. Nginx之正则表达式、location匹配简介以及rewrite重写

    目录 一.Nginx 正则表达式 二.location 匹配简介 1.匹配规则格式 ①.精准匹配 ②.一般匹配 ③.正则匹配 2.常用的匹配规则 3.匹配的优先级 4.示例 5.实际网站使用中,至少有 ...

  9. Nginx中的location规则与rewrite重写(详解)

    内容预知 1.Nginx中location与rewrite 1.1 location与rewrite常用的正则表达式 1.2  location与rewrite的联系和区别 2.location的匹配 ...

最新文章

  1. hackerrank---Sets - Symmetric Difference
  2. mongodb 安装启动
  3. P3750-[六省联考2017]分手是祝愿【期望dp】
  4. 946. 验证栈序列
  5. 2021沭阳中学高考成绩查询,沭阳建陵中学2020高考喜报!
  6. Linux操作系统下信号处理函数
  7. 【前端基础进阶】JS原型、原型链、对象详解
  8. 【.Net码农】Stream 和 byte[] 之间的转换
  9. (转载)3. 飞控与惯性导航系统
  10. C++ 数据结构实战:快速查找
  11. EXCEL 正态分布概率计算 NORM.S.DIST()和NORM.DIST()函数
  12. 邮箱smtp服务-QQ邮箱163邮箱(保姆级图文)【杂记】
  13. veu中高德怎么定义多个marker?
  14. 重装系统开机蓝屏0x0000007E错误但是可以进入安全模式
  15. 【毕设选题推荐】机器人工程专业毕设选题推荐
  16. 没技术的人,看看这5个生意,虽然不起眼,很多人却在悄悄地赚钱
  17. android 设置背景ah,Ahjesus,
  18. Your account does not have sufficient permissions to modify containers的解决方法
  19. Python数据分析案例18——化学分子数据模型(机器学习分类问题全流程)
  20. 一份 Git cheat sheet 送给您

热门文章

  1. 11.Linux文件管理命令---diff比较两个文件
  2. 免费订阅天气并发送到手机
  3. 梦到娭毑_原水_新浪博客
  4. oracle判断是否为空为空赋值,sql数据库中ISNULL函数用法 sql语句判断值是否为空...
  5. 电影票syslog团购
  6. BLE4.0 搜索附近设备技巧
  7. 婚后财产分割诉讼时效有多长时间
  8. @Python与我何干
  9. 有关iphone表情符号的处理
  10. input里添加小图标 (实用、赞)