Nginx rewrite 重写功能和Nginx的正则表达式

一、 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 代替,不能废除旧域名,从旧域名跳转到新域名,且保持其参数不变
    [[email protected] 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%]
    [[email protected] bin]# yum install nginx -y 
    [[email protected] ~]# mkdir /abc
    [[email protected] ~]# mount.cifs //192.168.56.1 /mnt
    Password for [email protected]//192.168.254.10/linuxs:
    [[email protected] ~]# cd /abc/LNMP-C7/LNMP-C7/
    [[email protected] LNMP-C7]# ls
    Discuz_X3.4_SC_UTF8.zip
    mysql-boost-5.7.20.tar.gz
    ncurses-5.6.tar.gz
    nginx-1.12.2.tar.gz
    php-5.6.11.tar.bz2
    php-7.1.10.tar.bz2
    php-7.1.20.tar.bz2
    php-7.1.20.tar.gz
    zend-loader-php5.6-linux-x86_64_update1.tar.gz
    [[email protected] LNMP-C7]# tar -zxvf nginx-1.12.2.tar.gz -C /opt
    [[email protected] LNMP-C7]# useradd -M -s /sbin/nologin nginx
    [[email protected] LNMP-C7]# cd /opt/nginx-1.12.2/
    [[email protected] nginx-1.12.2]# ls
    auto     CHANGES.ru  configure  html     man     src
    CHANGES  conf        contrib    LICENSE  README
    [[email protected] nginx-1.12.2]# yum install gcc gcc-c++ pcre pcre-devel make zlib-devel -y
    [[email protected] nginx-1.12.2]#  ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
    [[email protected] nginx-1.12.2]# make && make install
    [[email protected] conf]# vim nginx.conf
    37         server_name  www.accp.com;
    41         access_log  logs/www.accp.com/access.log  main;
    [[email protected] conf]# yum install bind -y
    [[email protected] conf]# vim /etc/named.conf
    13         listen-on port 53 { any; };
    21         allow-query     { any; };
    [[email protected] conf]# vim /etc/named.rfc1912.zones
    25 zone "accp.com" IN {
    26         type master;
    27         file "accp.com.zone";
    28         allow-update { none; };
    29 };
    [[email protected] conf]# cd /var/named/
    [[email protected] named]# ls
    data     named.ca     named.localhost  slaves
    dynamic  named.empty  named.loopback
    [[email protected] named]# cp -p named.localhost accp.com.zone
    [[email protected] named]# vim accp.com.zone
    www     IN      A       192.168.247.202
    [[email protected] named]# systemctl start named
    [[email protected] named]# systemctl stop firewalld.service
    [[email protected] named]# setenforce 0
    [[email protected] named]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
    [[email protected] named]# cd /usr/local/nginx/
    [[email protected] nginx]# ls
    conf  html  logs  sbin
    [[email protected] nginx]# cd logs/
    [[email protected] logs]# mkdir www.accp.com
    [[email protected] logs]# ls
    error.log  www.accp.com
    [[email protected] logs]# nginx
    [[email protected] logs]# netstat -natp | grep 80
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6

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

    [[email protected] 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;
        }
    [[email protected] logs]# vim /etc/named.rfc1912.zones
    zone "kgc.com" IN {
        type master;
        file "kgc.com.zone";
        allow-update { none; };
    };
    [[email protected] logs]# cd /var/named/
    [[email protected] named]# ls
    accp.com.zone  dynamic   named.empty      named.loopback
    data           named.ca  named.localhost  slaves
    [[email protected] named]# cp -p accp.com.zone kgc.com.zone
    [[email protected] named]# systemctl restart named
    [[email protected] named]# killall -1 nginx

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


    基于客户端IP访问跳转

    [[email protected] named]# vim /usr/local/nginx/conf/nginx.conf
    
    42 #设置是否合法的IP标志
    43         set $rewrite true;
    44 #判断是否为合法IP,是否是允许的IP
    45         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         }
    [[email protected] named]# cd /usr/local/nginx/html/
    [[email protected] html]# ls
    50x.html  index.html
    [[email protected] html]# vim maintenance.html
    [[email protected] html]# killall -3 nginx
    [[email protected] html]# nginx 



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

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



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

    [[email protected] named]# vim /usr/local/nginx/conf/nginx.conf
    42         location ~* /upload/.*\.php$ {
    43                 rewrite (.+) http://www.accp.com permanent;
    44         }
    [[email protected] named]# nginx -t
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    [[email protected] named]# killall -3 nginx
    [[email protected] named]# nginx



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

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



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

    [[email protected] named]# vim /usr/local/nginx/conf/nginx.conf
    42         location ~* ^/abc/123.html {
    43                 rewrite (.+) http://www.accp.com permanent;
    44         }
    [[email protected] named]# killall -3 nginx
    [[email protected] named]# nginx

原文地址:https://blog.51cto.com/14557905/2463924

时间: 2024-11-08 18:36:15

Nginx rewrite 重写功能和Nginx的正则表达式的相关文章

Nginx Rewrite相关功能

Nginx Rewrite相关功能 Nginx服务器利用ngx_http_rewrite_module模块处理rewrite请求,此功能依靠RCRE(perl compatible regularexpression),因此编译之前要安装PCRE库,rewrite是nginx服务器的重要功能之一,用于实现URL的重写,URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需 其他网站修改我们的链接,就可以设置为访问,另外还可以在一定程度上提高网站的安全性

nginx rewrite重写与防盗链配置

nginx rewrite重写规则与防盗链配置方法 时间:2016-02-04 15:16:58来源:网络 导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标记的几种形式,盗链时返回403错误,允许的域名直接跟在第二行的域名后面. nginx rewrite重写规则与防盗链配置方法 nginx rewite 规则,官方文档:http://wiki.nginx.org/NginxHttpRewriteModule nginx rewrite规则格式:rew

09 nginx Rewrite(重写)详细解析

一:Rewrite(重写)详细解析 rewrite 重写 重写中用到的指令 if  (条件) {}  设定条件,再进行重写 set #设置变量 return #返回状态码 break #跳出rewrite rewrite #重写 If  语法格式 If 空格 (条件) { 重写模式 } 条件又怎么写? 答:3种写法 1: “=”来判断相等, 用于字符串比较 2: “~” 用正则来匹配(此处的正则区分大小写) ~* 不区分大小写的正则 3: -f -d -e来判断是否为文件,为目录,是否存在. 例

nginx rewrite功能

Nginx rewrite 一.什么是Nginx rewrite Nginx rewrite 主要功能是实现URL地址重写.Nginx的 rewrite 规则需要PCRE软件的支持,即通过Perl兼容正则表达式语法进行规则匹配 二.Nginx rewrite 语法和参数介绍 1.Nginx rewrite 语法 rewrite regex replacement [flag]; rewrite:固定格式 regex: 正则表达式 replacement:重写后的URL flag: 重写状态标记

nginx之rewrite相关功能

Nginx Rewrite相关功能 Nginx服务器利用ngx_http_rewrite_module 模块解析和处理rewrite请求,此功能依靠 PCRE(perl compatible regular expression),因此编译之前要安装PCRE库,nginx的正则表达式底层依赖于PCRE库,PCRE是用perl语言写的:rewrite是nginx服务器的重要功能之一,用于实现URL的重写,URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也

Nginx 安装配置 禁止使用IP访问 rewrite重写 别名设置 日志轮询

1.yum install pcre pcre-devel -y#支持rewrite重写功能 2.yum -y install openssl openssl-devel#支持https功能 3.useradd nginx -s /sbin/nologin -M#添加用户 4.tar zxf nginx-1.6.2.tar.gz   cd nginx-1.6.2./configure \--user=nginx --group=nginx \--prefix=/application/nginx

nginx rewrite proxy_pass location 的理解

原创caoshuming_500 最后发布于2014-07-11 21:25:26 阅读数 29615 收藏展开1. rewrirerewrite 模块简介rewrite 是nginx的重写模块,是一个正则表达式与虚拟机的结合.因为loaction是遍历都执行一遍(没有匹配成功就 /):所以, rewrite 到新的uri后进入另外一个location ,恰好这个location也有rewrite 再次重新的uri 又调回原来的location:这样就是 四循环了,最多执行10次,然后报500错

Nginx 状态信息功能配置

Nginx 状态信息功能介绍 Nginx 有一个 ngx_http_stub_status_module 模块,主要功能是记录 Nginx 的基本访问状态信息,让使用者了解 Nginx 的工作状态 要使用该模块,必须在编译安装 Nginx 的时候添加 --with-http_stub_status_module 参数,可以用 /usr/local/nginx/sbin/nginx -V 来查看是否添加 配置 Nginx 状态信息功能 可以单独创建一个虚拟主机来配置 Nginx 状态信息功能 [[

apache的rewrite重写、日志切割、防盗链

一.rewrite重写 mod_rewrite 提供了基于正则表达式规则动态修改传入的请求的 URL 的方法.可以定义任意的的url映射到内部的站点文件中 1演示现象,解决效果,得出rewrite概念 2-1如何实现具体讲解步骤,可以带入原理 2-2实践 3剖析实现原理,提升知识面 4小结 1.rewrite需求 我们在使用Apache做为Web服务器时,有时候出于SEO优化或者是url路径的简洁,需要将输入的url转换成更为友好的url,这时候就可以使用rewrite重写功能. rewrite