千家信息网

Nginx正则表达式与Nginx rewrite重写功能的介绍

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章将为大家详细讲解有关Nginx正则表达式与Nginx rewrite重写功能的介绍,文章内容质量较高,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、 Rewrite 跳转实
千家信息网最后更新 2025年01月23日Nginx正则表达式与Nginx rewrite重写功能的介绍

这篇文章将为大家详细讲解有关Nginx正则表达式与Nginx rewrite重写功能的介绍,文章内容质量较高,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一、 Rewrite 跳转实现
服务协议功能模块
url 资源定位路径

  • nginx----支持url重写、支持if条件判断,但不支持else
  • 跳转----循环最多可以执行10次,超过后nginx将返回500代码错误
  • rewrite----使用nginx'全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向

    二、Rewrite 使用场景
  • 使用rewrite进行匹配跳转
  • 使用if匹配全局变量后跳转
  • 使用location匹配再跳转
    1.rewrite放在 server{},if{},location{}段中
    2.对域名或参数字符串:使用if全局变量匹配、使用proxy_pass反向代理
    三、nginx正则表达式
    常用的正则表达式元字符

    四、Rewrite 命令

    location分类

    正则匹配的常用表达式

    五、location优先级
    按优先级排列:
  • = 类型
  • ^~ 类型表达式
  • 正则表达式(和)类型
  • 常规字符串匹配类型,按前缀匹配
  • 通用匹配(/),如果没有其他匹配,任何请求都会匹配到
    location优先级规则(从高到低排列)
    1.匹配某个具体的文件
  • location = 完整路径
  • location ^~ 完整路径
  • location ~* 完整路径
  • location ~ 完整路径
  • location 完整路径
  • location /
    2.用目录做匹配访问某个文件
  • location = 目录
  • location ^~ 目录
  • location ~ 目录
  • location ~* 目录
  • location 目录
  • location /
    六、应用场景测试
    公司旧域名 www.domain.com 因业务需求有变更,需要使用新域名 www.newdomain.com 代替,不能废除旧域名,从旧域名跳转到新域名,且保持其参数不变

    [root@localhost bin]# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm获取http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm警告:/var/tmp/rpm-tmp.IHyTHc: 头V4 RSA/SHA1 Signature, 密钥 ID 7bd9bf62: NOKEY准备中...                          ################################# [100%]正在升级/安装...1:nginx-release-centos-7-0.el7.ngx ################################# [100%][root@localhost bin]# yum install nginx -y 
    [root@localhost ~]# mkdir /abc[root@localhost ~]# mount.cifs //192.168.56.1 /mntPassword for root@//192.168.254.10/linuxs:  [root@localhost ~]# cd /abc/LNMP-C7/LNMP-C7/[root@localhost LNMP-C7]# lsDiscuz_X3.4_SC_UTF8.zipmysql-boost-5.7.20.tar.gzncurses-5.6.tar.gznginx-1.12.2.tar.gzphp-5.6.11.tar.bz2php-7.1.10.tar.bz2php-7.1.20.tar.bz2php-7.1.20.tar.gzzend-loader-php5.6-linux-x86_64_update1.tar.gz[root@localhost LNMP-C7]# tar -zxvf nginx-1.12.2.tar.gz -C /opt
    [root@localhost LNMP-C7]# useradd -M -s /sbin/nologin nginx[root@localhost LNMP-C7]# cd /opt/nginx-1.12.2/[root@localhost nginx-1.12.2]# lsauto     CHANGES.ru  configure  html     man     srcCHANGES  conf        contrib    LICENSE  README[root@localhost nginx-1.12.2]# yum install gcc gcc-c++ pcre pcre-devel make zlib-devel -y[root@localhost nginx-1.12.2]#  ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module[root@localhost nginx-1.12.2]# make && make install
    [root@localhost conf]# vim nginx.conf37         server_name  www.accp.com;41         access_log  logs/www.accp.com/access.log  main;
    [root@localhost conf]# yum install bind -y[root@localhost conf]# vim /etc/named.conf 13         listen-on port 53 { any; };21         allow-query     { any; };[root@localhost conf]# vim /etc/named.rfc1912.zones 25 zone "accp.com" IN {26         type master;27         file "accp.com.zone";28         allow-update { none; };29 };[root@localhost conf]# cd /var/named/[root@localhost named]# lsdata     named.ca     named.localhost  slavesdynamic  named.empty  named.loopback[root@localhost named]# cp -p named.localhost accp.com.zone[root@localhost named]# vim accp.com.zone www     IN      A       192.168.247.202[root@localhost named]# systemctl start named[root@localhost named]# systemctl stop firewalld.service [root@localhost named]# setenforce 0[root@localhost named]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/[root@localhost named]# cd /usr/local/nginx/[root@localhost nginx]# lsconf  html  logs  sbin[root@localhost nginx]# cd logs/[root@localhost logs]# mkdir www.accp.com[root@localhost logs]# lserror.log  www.accp.com[root@localhost logs]# nginx [root@localhost logs]# netstat -natp | grep 80tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6

    打开win10客户机,配置dns服务器,并使用域名访问。

    [root@localhost logs]# vim /usr/local/nginx/conf/nginx.conf    location / {       #域名重定向'                 if ($host = 'www.accp.com') {'                       rewrite ^/(.*)$ http://www.kgc.com/$1 permanent;'               }             root /html;             index index.html index.htm;    }
    [root@localhost logs]# vim /etc/named.rfc1912.zones zone "kgc.com" IN {    type master;    file "kgc.com.zone";    allow-update { none; };};[root@localhost logs]# cd /var/named/[root@localhost named]# lsaccp.com.zone  dynamic   named.empty      named.loopbackdata           named.ca  named.localhost  slaves[root@localhost named]# cp -p accp.com.zone kgc.com.zone
    [root@localhost named]# systemctl restart named[root@localhost named]# killall -1 nginx

    [root@localhost html]# vim /usr/local/nginx/conf/nginx.conf37         server_name  bbs.accp.com;42         location /post {43                 rewrite (.+) http://www.accp.com/bbs$1 permanent;44         }
    [root@localhost html]# cd -/var/named[root@localhost named]# vim accp.com.zone [root@localhost named]# cat accp.com.zone $TTL 1D@   IN SOA  @ rname.invalid. (                0   ; serial                1D  ; refresh                1H  ; retry                1W  ; expire                3H )    ; minimumNS  @A   127.0.0.1bbs IN  A   192.168.247.202
    [root@localhost named]# killall -3 nginx[root@localhost named]# nginx[root@localhost named]# systemctl restart named


    基于客户端IP访问跳转

    [root@localhost named]# vim /usr/local/nginx/conf/nginx.conf42 #设置是否合法的IP标志43         set $rewrite true;44 #判断是否为合法IP,是否是允许的IP45         if ($remote_addr = "192.168.247.139"){46                 set $rewrite false;47         }48 #不被允许的IP进行判断,打上标记49         if ($rewrite = true){50                 rewrite (.+) /maintenance.html;51         }52 #匹配标记进行跳转站点53         location = /maintenance.html {54                 root html;55         }
    [root@localhost named]# cd /usr/local/nginx/html/[root@localhost html]# ls50x.html  index.html[root@localhost html]# vim maintenance.html[root@localhost html]# killall -3 nginx [root@localhost html]# nginx 



    基于参数匹配的跳转---跳转到首页

    [root@localhost named]# vim /usr/local/nginx/conf/nginx.conf37         server_name  www.accp.com;42         if ($request_uri ~ ^/100-(100|200)-(\d+).html$){43                 rewrite (.*) http://www.accp.com permanent;44         }[root@localhost named]# vim accp.com.zone [root@localhost named]# cat accp.com.zone $TTL 1D@   IN SOA  @ rname.invalid. (                0   ; serial                1D  ; refresh                1H  ; retry                1W  ; expire                3H )    ; minimumNS  @A   127.0.0.1www IN  A   192.168.247.202
    [root@localhost named]# systemctl restart named[root@localhost named]# killall -3 nginx[root@localhost named]# nginx



    基于目录下所有PHP文件跳转

    [root@localhost named]# vim /usr/local/nginx/conf/nginx.conf42         location ~* /upload/.*\.php$ {43                 rewrite (.+) http://www.accp.com permanent;44         }
    [root@localhost named]# nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful[root@localhost named]# killall -3 nginx[root@localhost named]# nginx



    基于最普通URL请求的跳转--跳转到首页

    [root@localhost named]# vim /usr/local/nginx/conf/nginx.conf42         location ~* ^/abc/123.html {43                 rewrite (.+) http://www.accp.com permanent;44         }



    基于最普通URL请求的跳转--跳转到首页

    [root@localhost named]# vim /usr/local/nginx/conf/nginx.conf42         location ~* ^/abc/123.html {43                 rewrite (.+) http://www.accp.com permanent;44         }
    [root@localhost named]# killall -3 nginx[root@localhost named]# nginx
到此为止, 关于Nginx正则表达式与Nginx rewrite重写功能有了一个基础的认识, 但是对于具体的使用方法还是需要多加巩固和练习,如果想了解更多相关内容,请关注行业资讯。
表达式 域名 正则 目录 路径 变量 类型 功能 优先级 全局 参数 文件 首页 支持 合法 普通 内容 场景 字符 字符串 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 关于网络安全的分析 网络安全的微信公众号 肇庆销售软件开发费用是多少 安丘电力系统软件开发 检查人员名录数据库 第三次国土调查数据库使用软件 计算机网络技术多少分及格 银行业 网络安全报告 江苏企业软件开发服务费 医院网络安全排查整治情况 数据库访问太频繁 无锡市网络安全应急预案 北京萌芽网络技术有限公司 csgo直接加入服务器代码 事务性应用数据库 内网www服务器安全防护 数据库是长期存储在计算机中 不能插入汉字到数据库表 db2数据库中if 网络安全专业市场就业情况 网络安全行业的社会分析 永辉软件开发怎么样 怎么验证新建的数据库连接 网络安全的微信公众号 怎么样能称为软件开发大牛 威纶触摸屏数据库的建立 曲阜软件开发有限公司在线咨询 网络安全元素里面 数据库文件分离后还原不了 2018网络安全考试试卷2
0