目录

Nginx常见模块

nginx内置模块

nginx配置文件的常见模块

location模块

常见的正则表达式

location常用的匹配规则

Rewrite模块

Rewrite功能

Rewrite跳转场景

Rewrite跳转实现

语法格式

基于旧域名跳转到新域名

基于客户端IP访问跳转

基于参数匹配的跳转

基于旧域名跳转到新域名

基于 目录下所有的php文件

基于普通的一条url


Nginx常见模块

nginx内置模块

nginx作为低资源低能耗高性能的一个web服务,它的模块相对于apache少,但是nginx他是高度模块化的设计,编写模块相对简单。下面就了解一下nginx的模块吧

官方文档地址

nginx documentationhttps://nginx.org/en/docs/一共有四大模块

第一块模块主要就是一些索引和核心功能的介绍

第二块模块,基于http操作和功能

第三块模块是邮箱代理

第四块模块就是基于tcp协议的stream(数据流)模块

觉得nginx还是很友好的吧,就四个模块,哈哈哈可是全拿下可不是很容易哦

Nginx_http常用模块

ngx_http_core_module       模块是 nginx 的核心模块,该模块提供了很多 http 代理基础功能

ngx_http_access_module    允许限制访问某些客户端地址。访问也可以通过密码,子请求的结果或JWT进行限制。通过地址和密码同时限制访问受到满足指令的控制。​​​​

ngx_http_gzip_module 模块是一个使用了 gzip 方法压缩响应的过滤器。有助于将传输数据的大小减少一半甚至更多。

ngx_http_ssl_module 模块为HTTPS提供了必要的支持。该模块不是默认生成的,它应该使用--with-http_ssl_module配置参数启用。为了减少处理器负载,建议使用

ngx_http_proxy_module 允许将请求传递给另一台服务器。常见于实现反向代理服务器。

ngx_http_rewrite_module 模块用于使用PCRE正则表达式更改请求URI,返回重定向并有条件地选择配置。

ngx_http_upstream_module 该模块用户分发到不同的服务器节点。支持由proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass, grpc_pass等的服务器组。

ngx_http_log_module 模块以指定的格式写入请求日志。

ngx_http_stub_status_module 模块提供对基本状态信息的访问

ngx_http_auth_basic_module 模块允许通过使用“HTTP基本认证”协议验证用户名和密码来限制对资源的访问。

nginx配置文件的常见模块

  • http

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

  • server

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

  • location

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

location模块

常见的正则表达式

字符 含义
. 匹配任意单个字符,可以是一个汉字
^ 行首锚定, 用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
* 匹配前面字符任意次(包括0次)
? 0或1次
+ 1次或多次(1次或以上)
\ 转义符
\d 只匹配数字
{n} 重复n次
{n,} 至少n次(n次货以上)
{n,m} n到m次
[ ] 定义匹配字符的范围,只匹配一次
[c] 单个字符
[a-z] 匹配任意小写字母
[a-zA-Z0-9] 匹配任意字母和数字
() 表达式的开始和结束位置
| 或运算符a|b

location的几种匹配方式

location:
精确匹配:location = /  {.....}
一般匹配:location  /  {.....}
正则匹配:location ~ / {.....}

location常用的匹配规则

规则表达式 规则含义
= 进行普通字符精确匹配。也就是完全匹配
^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他 location
~ 表示执行一个正则匹配,区分大小写
~* 表示执行一个正则匹配,不区分大小写
!~ 表示执行一个正则匹配,区分大小写不匹配
!~* 表示执行一个正则匹配,不区分大小写不匹配

说明

  1. 等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。

  2. ^~类型表达式。一旦匹配成功,则不再查找其他匹配项。

  3. 正则表达式类型(*)的优先级次之。常规字符串匹配类型(不带任何修饰符的匹配),按前缀匹配。/test

  4. 通用匹配(/),如果没有其它匹配,任何请求都会匹配到。

比如:

[root@localhost /usr/local/nginx/conf]# vim nginx.conf

这样访问还是访问主页面,并没有啥卵用

必须要在后面跟具体的文件

这样就优先与‘=’了

再比如同一个文件名,不在同一目录下,会匹配谁呢

[root@localhost /usr/local/nginx/html/image]# ls
cat  dog
[root@localhost /usr/local/nginx/html/image]# cd cat
[root@localhost /usr/local/nginx/html/image/cat]# ls
1.jpg
[root@localhost /usr/local/nginx/html/image/cat]# cd ../dog/
[root@localhost /usr/local/nginx/html/image/dog]# ls
1.jpg

配置文件

当然是可爱的咪咪了!!!

实际网站使用中,至少有三个匹配规则定义

第一个规则

直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。

可以是一个静态首页,也可以直接转发给后端应用服务器

location = / {root html;index index.html index.htm;}

第二个规则

是处理静态文件请求,这是nginx作为http服务器的强项有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用

location ^~ /static/ {root /webroot/static/ ;
}
​
location ~* \.(gif|jpg|jpeg)$ {root /webroot/static/ ;
}

第三个规则

就是通用规则,比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器。

location  / {proxy_pass http://tomcat_server;
}      

Rewrite模块

现在 Nginx 已经成为很多公司作为前端反向代理服务器的首选,在实际工作中往往会 遇到很多跳转(重写 URL)的需求。比如更换域名后需要保持旧的域名能跳转到新的域名 上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。如果在后端使用的 Apache 服务器,虽然也能做跳转,规则库也很强大,但是用 Nginx 跳转效率会更高

Rewrite功能

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。

rewrite 只能在
server {}
location {}
if {}
中,并且默认只能对域名后边的除去传递的参数外的字符串起作用
 例如:京东登录账号,就是一个跳转

只针对“?前域名后”重写

Rewrite跳转场景

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

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

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

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

Rewrite跳转实现

Nginx 是通过 ngx_http_rewrite_module 模块支持 url 重写、支持 if 条件判断,但不支持 else。

另外该模块需要 PCRE 支持,应在编译 Nginx 时指定 PCRE 支持,默认已经安装。

根据相关变量重定向和选择不同的配置,从一个 location 跳转到另一个 location,不过这样 的循环最多可以执行 10 次,超过后 Nginx 将返回 500 错误。

同时,重写模块包含 set 指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他location、记录做了什么等等。

rewrite执行顺序如下:

  1. 执行server块里面的rewrite指令。

  2. 执行location 匹配。

  3. 执行选定的location中的rewrite指令。

语法格式

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

flag 标记说明:
last:本条规则匹配完成后,继续向下匹配新的location URL规则,一般用在server和if中

break:本条规则匹配完成即终止,不再匹配后面的任何规则。一般用在location中

redirect:返回 302 临时重定向,浏览器地址会显示跳转后的 URL 地址,爬虫不会更新 url(因为是临时)。

permanent:返回 301 永久重定向,浏览器地址栏会显示跳转后的 URL 地址,爬虫更新 url。

基于旧域名跳转到新域名

例如现在访问的是www.xiao.com,现在需要将这个域名下面的发帖都跳转到 www.bin.com,后面的参数不变

创建目录

[root@localhost /usr/local/nginx/html]# ls
50x.html  image  index.html  test
[root@localhost /usr/local/nginx/html]# cd test/
[root@localhost /usr/local/nginx/html/test]# ls
index.html
[root@localhost /usr/local/nginx/html/test]# cat index.html
this is test web

修改配置文件

[root@localhost /usr/local/nginx/conf]# vim nginx.conf

在Windows系统中记得要添加域名哦!!!

C:\Windows\System32\drivers\etc

输入www.xiao.com就会转到www.bin.com

基于客户端IP访问跳转

在/var目录下创建一个站点文件

[root@localhost /var]# mkdir -p www/html
[root@localhost /var/www/html]# vim weihu.html
[root@localhost /usr/local/nginx/html]# cat /var/www/html/weihu.html
<head><h1>This page is under maintenance, please come back later<h1></head>
[root@localhost /usr/local/nginx/conf]# vim nginx.conf

###设置是否合法的IP标识###
        set $rewrite true;    
        
        ###判断是否合法的ip###
        if ($remote_addr = "192.168.91.103") {                                
        #当客户端IP为192.168.91.103时将变量值设为false,不进行重写
        set $rewrite false;                                                             }                           
          if ($rewrite = true) {                                                          rewrite (.+) /weihu.html;                                                          
        } 
        location = /weihu.html {
            root   /var/www.html;
        }
        
        location / {
            root   html;
            index  index.html index.htm;
        }

 这样在域名后瞎打或打错都会跳到这个错误页面中

                基于参数匹配的跳转

http://www.xiao.com/(100|200)-100.html跳转到http://www.xiao.com页面

[root@localhost /usr/local/nginx/conf]# vim nginx.conf

在网页测试输入www.xiao.com/100-100-任意/html

基于旧域名跳转到新域名

比如我们用惯了一个网址,服务商想把地址改变,用户输入原来的网址,可以跳到新的地址

比如,我们访问bbs.xiao.com/post它会跳到新的地址,www.xiao.com/bbs/post

[root@localhost /usr/local/nginx/conf]# vim nginx.conf

#$1为位置变量,代表/post 

创建站点文件

[root@localhost /usr/local/nginx/html]# mkdir -p bbs/post
[root@localhost /usr/local/nginx/html/bbs/post]# vim index.html
[root@localhost /usr/local/nginx/html/bbs/post]# cat index.html
<h1>This is mylove</h1>

在网页输入bbs.xiao.com/post就会跳转到www.xiao.com/bbs/post

记得hosts文件要加bbs.xiao.com哦,不然解析不出来

基于 目录下所有的php文件

访问任何php文件,都会返回首页

在网址输入www.xiao.com/upload/*(任何).php都会返回到首页

基于普通的一条url

这个是最简单的,就利用正则表达式,以什么开头以什么结尾,改改不管什么都会跳到主页面

Nginx的重写功能——Rewrite相关推荐

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

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

  2. Nginx地址重写功能

    Nginx地址重写功能

  3. Nginx重写功能rewrite

    目录 一.Rewrite简单介绍 1.Rewrite的概述 2.Rewrite跳转场景 3.URI.URL.URN 4.Rewrite跳转实现 5.Rewrite实际场景 6.Nginx正则表达式 7 ...

  4. Nginx 重写功能(location / rewrite)

    Nginx 重写功能 一.Nginx常见模块 二.访问路由location 2.1 location常用正则表达式 2.2location的分类 2.3location 常用的匹配规则 2.4loca ...

  5. Nginx教程 :nginx URL 重写

    Nginx URL重写(rewrite)介绍 和apache等web服务软件一样,rewrite的组要功能是实现RUL地址的重定向.Nginx的rewrite功能需要PCRE软件的支持,即通过perl ...

  6. Nginx URL 重写

    一.URL重写介绍 和apache等web服务软件一样,rewrite的主要功能是实现URL地址的重定向. Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规 ...

  7. Nginx配置location及rewrite规则

    Nginx配置location及rewrite规则 示例: location  = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location ...

  8. nginx url 重写_Nginx重写URL规则示例

    nginx url 重写 NGINX rewrite rules are used to change entire or a part of the URL requested by a clien ...

  9. nginx 地址重写 、反向代理

    目录 案例一:nginx地址重写 步骤一:修改配置文件(访问a.html 跳到b.html) 步骤二:修改配置文件(访问a.网站的a页面,跳转的是a网站的b页面) 步骤三:修改配置文件(访问192.1 ...

最新文章

  1. 如何节省 1TB 图片带宽?解密极致图像压缩
  2. Linux——多线程
  3. 类模板非类型形参实现Stack
  4. [云炬创业基础笔记] 第三章测试4
  5. python中xpath用法_Python中的xpath基础使用
  6. Linux系统管理命令之管理文件和目录
  7. python背景图颜色_python – 使图形透明与彩色背景
  8. php 5.4.39 安装,Lamp 安装(CentOS6.6, php-5.4.39, httpd-2.4.12, mysql-5.6.24)
  9. ios swift 实现饼状图进度条,swift环形进度条
  10. OSSIM5 自定义安装
  11. 服务器磁盘读取暴涨_8分钟了解服务器硬件知识
  12. 让Cocos2dx中的TestCPP中的Box2dTest运行起来
  13. Python代码缩进
  14. Unity3D圣典学习【2】之CharacterController
  15. Cisco ASA 5585防火墙ASDM配置
  16. 微信公众号封面一键生成器
  17. 威联通TS231nas虚拟服务器,威联通NAS小技巧:自带VS3软件下安装win7虚拟机
  18. Oracle默认数据库角色账号密码
  19. 年度成绩大赏|2021,StreamNative 扬帆起航
  20. 鲁大师历经18年的风雨后,又一重量级评测即将诞生

热门文章

  1. 崔永元的《实话实说》
  2. 中国权威的ITIL培训与认证机构
  3. linux cpu do idle,Linux cpuidle framework(1)_概述和软件架构
  4. 信息与消防预案系统简介
  5. 美图计算机视觉工程师实习生面试
  6. android 流失标签,Android中常见的热门标签的流式布局的实现
  7. java 判断繁体_java获取系统语言(区分简体中文和繁体中文)
  8. C语言实现简单的计算器(循环输入,加减乘除法可选)
  9. 局域网与广域网,以太网与点对点链路
  10. 安全防御--IPsec VPN点到点的实验