返回顶部
首页 > 资讯 > 精选 >nginx rewrite功能如何使用
  • 657
分享到

nginx rewrite功能如何使用

2023-06-30 16:06:18 657人浏览 薄情痞子
摘要

今天小编给大家分享一下Nginx rewrite功能如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言大家

今天小编给大家分享一下Nginx rewrite功能如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    前言

    大家在浏览某些网站的时候,有没有发现,当输入:www.abc.com或者www.abcd.com的时候,页面均能正常显示www.abc.com的主页内容。这就是nginx rewrite的一个使用场景。

    rewrite简介

    rewrite是Nginx服务器提供的一个重要基本功能,主要作用用来实现URL地址重写

    rewrite功能实现依赖于pcre的支持,因此在编译安装Nginx服务器之前,需安装pcre库(nginx使用ngx_Http_rewrite_module模块来解析和处理Rewrite功能的相关配置)

    在真正了解rewrite的使用之前,有必要全面系统学习下rewrite相关的指令和语法使用,下面来逐一了解下吧

    Rewrite规则与指令

    set指令

    该指令用来设置一个新的变量。

    nginx rewrite功能如何使用

    • variable,变量名,该变量名要用"$"作为变量的第一个字符,且不能与Nginx服务器预设的全局变量同名;

    • value:变量值,可以是字符串、其他变量或者变量的组合等;

    一个简单的案例

    server {    listen 8081;    server_name localhsot;    location /server {            set $name zhangsan;            set $age 19;            default_type text/plain;            return 200 $name=$age;    }}

    重启nginx服务,然后浏览器访问观察下效果

    nginx rewrite功能如何使用

    下面列举了Rewrite常用全局变量

    这些变量可以在使用过程中结合自身的业务灵活选择使用

    变量说明
    $args变量中存放了请求URL中的请求指令。如http://IP:8080?arg1=value1&args2=value2中 的"arg1=value1&arg2=value2",功能和$query_string一样
    $http_user_agent变量存储了用户访问服务的代理信息(如果通过浏览器访问,记录的是浏览器的相关版本信息)
    $host变量存储的是访问服务器的server_name值
    $document_uri变量存储了当前访问地址的URI。比如http://IP/server?id=10&name=zhangsan中的"/server",功能和$uri一样
    $document_root变量存储的是当前请求对应location的root值,如果未设置,默认指向Nginx自带html目录所在位置
    $content_length变量存储的是请求头中的Content-Length的值
    $content_type变量存储的是请求头中的Content-Type的值
    $http_cookie变量存储的是客户端的cookie信息,可以通过add_header Set-Cookie’cookieName=cookieValue’来添加cookie数 据
    $limit_rate变量中存储的是Nginx服务器对网络连接速率的限制,也就是Nginx配置中对limit_rate指令设置的值,默认是0,不限制
    $remote_addr变量中存储的是客户端的IP地址
    $remote_port变量中存储了客户端与服务端建立连接的端口号
    $remote_user变量中存储了客户端的用户名,需要有认证模块才能获取
    $scheme变量中存储了访问协议
    $server_addr变量中存储了服务端的地址
    $server_name变量中存储了客户端请求到达的服务器的名称
    $server_port变量中存储了客户端请求到达服务器的端口号
    $server_protocol变量中存储了客户端请求协议的版本,比如"HTTP/1.1"
    $request_body_file变量中存储了发给后端服务器的本地文件资源的名称
    $request_method变量中存储了客户端的请求方式,比如"GET","POST"等
    $request_filename变量中存储了当前请求的资源文件的路径名
    $request_uri变量中存储了当前请求的URI,并且携带请求参数,比如http://IP/server?id=10&name=zhangsan中的"/server?id=10&name=zhangsan名

    我们来随机测试下几个指令的使用吧

    $args

    server {    listen 8081;    server_name localhsot;    location /server {            set $name zhangsan;            set $age 19;            default_type text/plain;            return 200 $name=$age=$args;    }}

    nginx rewrite功能如何使用

    nginx rewrite功能如何使用

    nginx rewrite功能如何使用

    其他的指令有兴趣的同学可以自行尝试,下面使用这些指令完成一个需求

    自定义日志输出格式,将请求的日志输出到自定义的日志中

    具体配置如下:

    log_fORMat main '$remote_addr - $request - $status - $request_uri - $http_user_agent';   server {        listen 8081;        server_name localhsot;        location /server {                access_log logs/access-server.log main;                set $name zhangsan;                set $age 19;                default_type text/plain;                return 200 $name=$age=$args=$http_user_agent;        }    }

    通过这种方式,就可以实现自定义请求的相关参数输出到自定义的日志文件中

    nginx rewrite功能如何使用

    if指令

    该指令用来支持条件判断,并根据条件判断结果选择不同的Nginx配置

    nginx rewrite功能如何使用

    condition为判定条件,可以支持以下写法:

    1)变量名称,如果变量名对应的值为空或者是0,if都判断为false,其他条件为true

    if ($param) { }
    location /testif {                set $username 'zhangsan';                default_type text/plain;                if ($username){                        return 200 success;                }                return 200 'params is empty';}

    nginx rewrite功能如何使用

    2) 使用"=“和”!="比较变量和字符串是否相等,满足为true,不满足为false

    if ($request_method = POST) {  return 405; 3}

    注意:此处和Java不一样的是字符串不需加引号

    3)使用正则表达式对变量匹配

    • 匹配成功返回true,否则返回false;

    • 变量与正则表达式之间使用"“,”“,”!“,”!"来连接;

    • “~” 代表匹配正则表达式过程中区分大小写;

    • "~*"代表匹配正则表达式过程中不区分大小写;

    • "!“和”!*"刚好和上面取相反值,如果匹配上返回false,匹配不上返回true;

    if ($http_user_agent ~ MSIE) {    #$http_user_agent的值中是否包含MSIE字符串,如果包含返回 true }

    注意:正则表达式字符串一般不需要加引号,但是如果字符串中包含"}“或者是”;"等字符时,就需要把引号加上

    if ($http_user_agent ~ Safari){                        return 200 Chrome;  }

    nginx rewrite功能如何使用

    4)判断请求文件是否存在使用"-f"和"!-f"

    • 当使用"-f"时,如果请求的文件存在返回true,不存在返回false;

    • 当使用"!f"时,如果请求文件不存在,但该文件所在目录存在返回true,文件和目录都不存在返回false,如果文件存在返回false;

    if (-f $request_filename){    #判断请求的文件是否存在}if (!-f $request_filename){    #判断请求的文件是否不存在}

    案例展示

    location /file {                root html;                default_type text/html;                if (!-f $request_filename){                        return 200 '<h2>not find file</h2>';                }        }

    当访问目录下不存在的文件时,将会看到如下的异常返回

    nginx rewrite功能如何使用

    5) 判断请求的目录是否存在使用"-d"和"!-d"

    • 当使用"-d"时,如果请求的目录存在,if返回true,如果目录不存在则返回false;

    • 当使用"!-d"时,如果请求的目录不存在但该目录的上级目录存在则返回true,该目录和它上级目录都不存在则返回false,如果请求目录存在也返回false;

    6) 判断请求的目录或者文件是否存在使用"-e"和"!-e"

    • 当使用"-e",如果请求的目录或者文件存在时,if返回true,否则返回false;

    • 当使用"!-e",如果请求的文件和文件所在路径上的目录都不存在返回true,否则返回false;

    7) 判断请求的文件是否可执行使用"-x"和"!-x"

    • 当使用"-x",如果请求的文件可执行,if返回true,否则返回false;

    • 当使用"!-x",如果请求文件不可执行,返回true,否则返回false; break指令

    该指令用于中断当前相同作用域中的其他Nginx配置。与该指令处于同一作用域的Nginx配置中,位于它前面的指令配置生效,位于后面的指令配置无效

    nginx rewrite功能如何使用

    location /{    if ($param){        set $id $1;        break;        limit_rate 10k;    }}

    案例演示

    location /break {                default_type text/plain;                set $username MIKE;                if ($args){                        set $username JIM;                        break;                        set $username JODAN;                }                return 200 $username;        }

    nginx rewrite功能如何使用

    return指令

    该指令用于完成对请求的处理,直接向客户端返回响应状态代码。在return后的所有Nginx配置都是无效的

    nginx rewrite功能如何使用

    • code,为返回给客户端的HTTP状态代理。可以返回的状态代码为0~999的任意HTTP状态代理;

    • text:为返回给客户端的响应体内容,支持变量的使用;

    • URL:为返回给客户端的URL地址;

    location /return {                default_type application/JSON;                return 200 '{id:1,name:jike}';        }

    nginx rewrite功能如何使用

    rewrite指令

    该指令通过正则表达式的使用来改变URI。可以同时存在一个或者多个指令,按照顺序依次对URL进行匹配和处理

    URL和URI的区别

    • URI:统一资源标识符

    • URL:统一资源定位符

    nginx rewrite功能如何使用

    • regex,用来匹配URI的正则表达式;

    • replacement:匹配成功后,用于替换URI中被截取内容的字符串。如果该字符串是以"http://"或者"https://"开头的,则不会继续向下对URI进行其他处理,而是直接返回重写后的URI给客户端;

    • flag:用来设置rewrite对URI的处理行为,可选值有如下

    last break redirect permanent

    last : 终止继续在本location中处理接收到的URI,并将此处重写的URI作为一个新的URI,使用各location块进行处理。该标志将重写的URI重写在server块中执行,为重写后的URI提供了转入到其他location块的机会;

    break : 将此处重写的URI作为一个新的URI,在本块中继续处理,该标志重写后的地址在当前的location块中执行,不会将新的URI转向其他的location块;

    redirect : 将重写后的URI返回给客户端,状态码为302,指明是临时重定向URI,主要用在replacement变量不是以 “http://”或“https://”开头的情况;

    redirect : 将重写后的URI返回给客户端,状态码为302,指明是临时重定向URI,主要用在replacement变量不是以 “http://”或“https://”开头的情况;

    permanent : 将重写后的URI返回给客户端,状态码为301,指明是临时重定向URI,主要用在replacement变量不是以 “http://”或“https://”开头的情况;

    示例1

    location /rewirte {                rewrite ^/rewrite/url\w*$ https://www.baidu.com;                rewrite ^/rewrite/(test)/\w*$ /$1;                rewrite ^/rewrite/(hello)/\w*$ /$1;        }        location /test {                default_type text/plain;                return 200 "hello success";        }

    示例2

    location /rewirte {                rewrite ^/rewrite/url\w*$ https://www.baidu.com;                rewrite ^/rewrite/(test)/\w*$ /$1 last;                rewrite ^/rewrite/(hello)/\w*$ /$1 last;        }        location /test {                default_type text/plain;                return 200 "hello success";        }

    rewrite_log指令

    该指令配置是否开启URL重写日志的输出功能

    nginx rewrite功能如何使用

    开启后,URL重写的相关日志将以notice级别输出到error_log指令配置的日志文件汇总

    location /rewirte {rewrite_log on;error_log logs/error.log notice;                rewrite ^/rewrite/url\w*$ https://www.baidu.com;                rewrite ^/rewrite/(test)/\w*$ /$1 last;                rewrite ^/rewrite/(hello)/\w*$ /$1 last;        }

    一、rewrite配置域名跳转

    有很多大型网站,在起步的时候,比如域名为 : www.haoyijia.com,但是域名太长所带来的问题就是不方便记忆,于是后面改成 www.hyj.com,问题是,一些老用户之前一直习惯了那个长域名,如何在老用户输入长域名的时候仍然可以跳转到新的短域名上呢?就可以考虑使用rewrite的功能;下面在本地做一下模拟。

    配置步骤:

    1、准备两个域名

    这里我直接在本地模拟2个域名,通过在本地的hosts文件配置下就可以了

    nginx rewrite功能如何使用

    2、配置nginx.conf文件

    server {listen 80;server_name www.zcy.com www.zhanGCongyi.com;rewrite ^/ http://www.jd.com permanent;}

    重启nginx服务,浏览器访问:www.zcy.com 或者www.zhangcongyi.com,观察效果

    nginx rewrite功能如何使用

    nginx rewrite功能如何使用

    nginx rewrite功能如何使用

    nginx rewrite功能如何使用

    二、rewrite配置独立域名

    一个完整的项目包含多个模块,比如购物网站有商品商品搜索模块、商品详情模块、购物车模块等,那么我们如何为每一个模块设置独立的域名。

    server{listen 80;server_name search.hm.com;rewrite ^(.*) http://www.hm.com/bbs$1 last;}server{listen 81;server_name item.hm.com;rewrite ^(.*) http://www.hm.com/item$1 last;}server{listen 82;server_name cart.hm.com;rewrite ^(.*) http://www.hm.com/cart$1 last;}

    本地的hosts文件添加如下配置

    nginx rewrite功能如何使用

    重启nginx服务,可以在浏览器访问下观察效果如何

    nginx rewrite功能如何使用

    三、rewrite配置目录合并

    索引优化(SEO)是一种利用搜索引擎的搜索规则,来提供目的网站的有关搜索引擎内排名的方式;

    我们在创建自己的站点时,可以通过很多种方式有效提供搜索引擎优化的程度,其中有一项就包含URL的目录层级一般不要超过三层,否则的话不利于搜索引擎的搜索也给客户端的输入带来了负担;

    但是将所有的文件放在一个目录下又会导致文件资源管理混乱,并且访问文件的速度也会随着文件增多而慢下来,这两个问题是相互矛盾的,使用rewrite就可以解决上述问题;

    举例,网站中有一个资源文件的访问路径时,比如访问:/server/11/22/33/44/20.html,也就是说20.html存在于第5级目录下,如果想要访问该资源文件,客户端的URL地址就要写成http://www.WEB.name/server/11/22/33/44/20.html;

    server {listen 80;server_name www.web.com;location /server{root html;}}

    nginx rewrite功能如何使用

    nginx rewrite功能如何使用

    但是这个是非常不利于SEO搜索引擎优化的,同时客户端也不好记,使用rewrite我们可以进行如下配置:

    server {listen 80;server_name www.web.com;location /server{rewrite ^/server-([0-9]+)-([0-9]+)-([0-9]+)- ([0-9]+)\.html$ /server/$1/$2/$3/$4/$5.html last;}}

    以上就是“nginx rewrite功能如何使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: nginx rewrite功能如何使用

    本文链接: https://www.lsjlt.com/news/330257.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • nginx rewrite功能如何使用
      今天小编给大家分享一下nginx rewrite功能如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言大家...
      99+
      2023-06-30
    • Nginx重写功能rewrite
      目录 一、Rewrite简单介绍 1、Rewrite的概述 2、Rewrite跳转场景 3、URI、URL、URN 4、Rewrite跳转实现 5、Rewrite实际场景  6、Nginx正则表达式 7、Rewrite执行顺序 二、loca...
      99+
      2023-10-23
      nginx 服务器 运维
    • nginx使用rewrite报错如何解决
      今天小编给大家分享一下nginx使用rewrite报错如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。问题描述由于本人...
      99+
      2023-07-05
    • 如何使用Nginx resin的proxy功能
      本篇内容主要讲解“如何使用Nginx resin的proxy功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Nginx resin的proxy功能”吧...
      99+
      2024-04-02
    • nginx使用rewrite报错的解决
      目录项目场景:问题描述原因分析:解决方案:项目场景: 今天编译安装nginx的时候想着要做rewrite功能,匆忙瞟了一眼编译文档就直接make&&make inst...
      99+
      2023-03-08
      nginx rewrite报错 nginx rewrite
    • rewrite模块怎么在Nginx中使用
      rewrite模块怎么在Nginx中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。rewrite模块即ngx_http_rewrite_module模块,主要功能是改写...
      99+
      2023-06-06
    • 怎么在nginx中使用rewrite 配置伪静态
      本篇文章为大家展示了怎么在nginx中使用rewrite 配置伪静态,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。正则表达式匹配,其中: * ~ 为区分大小写匹配 * ~* 为不...
      99+
      2023-06-08
    • Nginx安装后常用功能如何配置
      这篇文章主要介绍“Nginx安装后常用功能如何配置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Nginx安装后常用功能如何配置”文章能帮助大家解决问题。1.主配置文件与虚拟主机分离如果虚拟主机很多...
      99+
      2023-06-29
    • Nginx中如何开启php报错功能
      这篇文章主要介绍了Nginx中如何开启php报错功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Nginx中如何开启php报错功能文章都会有所收获,下面我们一起来看看吧。修改php.ini配置文件首先,我们需...
      99+
      2023-07-05
    • python如何使用Dir功能
      这篇文章主要介绍了python如何使用Dir功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Dir 功能dir()是Python3中强大的内置函数,它返回任何对象的属性和方...
      99+
      2023-06-27
    • win10 xbox功能如何使用
      本篇内容主要讲解“win10 xbox功能如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win10 xbox功能如何使用”吧!win10xbox使用方法:点击“开始”找到“xbox”功能...
      99+
      2023-07-01
    • Nginx常用功能有哪些
      这篇文章主要介绍“Nginx常用功能有哪些”,在日常操作中,相信很多人在Nginx常用功能有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Nginx常用功能有哪些”的疑惑有所帮助!接下来,请跟着小编一起来...
      99+
      2023-06-03
    • Nginx如何配置文件分段下载功能
      这篇文章主要为大家展示了“Nginx如何配置文件分段下载功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Nginx如何配置文件分段下载功能”这篇文章吧。Htm...
      99+
      2024-04-02
    • phpcms如何使用水印功能
      关键字描述:功能 使用 如何 水印 图片 字体 文字 需要 文件 中文 phpcms水印功能只有在添加标题图片的时候生成带水印的图片。编辑器上传的图片不能增加水印和缩略图添加水印功能:1,首先查看服务器参数查看图形处理...
      99+
      2022-06-12
      功能 使用 如何 图片 水印 字体 文字 文件 需要 中文
    • Django中如何使用Channels功能
      目录一、什么是WebSocket二、什么是Channels三、Django中使用Channel四、前端Websocket使用五、测试Channels功能      前言:最近后台写游...
      99+
      2024-04-02
    • FMDB如何使用Cached Statement功能
      这篇文章主要为大家展示了“FMDB如何使用Cached Statement功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“FMDB如何使用Cached Statement功能”这篇文章吧。FM...
      99+
      2023-06-04
    • excel筛选功能如何使用
      本文小编为大家详细介绍“excel筛选功能如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“excel筛选功能如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。excel筛选功能使用方法:首先打开exc...
      99+
      2023-07-02
    • Vue3通用API功能如何使用
      这篇文章主要介绍了Vue3通用API功能如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue3通用API功能如何使用文章都会有所收获,下面我们一起来看看吧。通用APIversion (暴漏当前使用的Vu...
      99+
      2023-07-06
    • Nginx使用ngx_http_upstream_module实现负载均衡功能示例
      目录负载均衡介绍什么是负载均衡为什么需要负载均衡负载均衡调度算法负载均衡后端节点状态负载均衡介绍 什么是负载均衡 负载均衡(Load Balance),意思是将负载(工作任务,访问请...
      99+
      2022-11-13
      Nginx 负载均衡 Nginx ngx_http_upstream_module
    • 如何更好地使用VS2008功能
      这篇文章将为大家详细讲解有关如何更好地使用VS2008功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。No.1:代码中插入图片,而且它可以被Notepad进行编辑?可以被NotePad进行编辑。为什么要...
      99+
      2023-06-17
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作