Nginx正则表达式与Nginx rewrite重写功能的介绍
发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,这篇文章将为大家详细讲解有关Nginx正则表达式与Nginx rewrite重写功能的介绍,文章内容质量较高,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、 Rewrite 跳转实
千家信息网最后更新 2025年02月24日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
表达式
域名
正则
目录
路径
变量
类型
功能
优先级
全局
参数
文件
首页
支持
合法
普通
内容
场景
字符
字符串
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
风电场网络安全专项检查
丹江口软件开发服务保障
河南高校党建软件开发系统
饥荒进入服务器保存存档
传奇一区二区最开始有几个服务器
狮子王下载软件开发
dell服务器虚拟
ldf数据库
宁波海曙区财务软件开发地址
网络安全技术论文下载
手抄报 网络安全文明行
绍兴直销软件开发
小学教师加强网络安全教育
软件开发行业利税比例
文专学计算机网络技术
思科网络安全证书有哪些证
网络安全是风险管理过程
登录sftp服务器
算丰服务器
计算机网络技术与应用 课件
plsql完全备份数据库
网络安全素材免费模板
攻城掠地 服务器
服务器电话销售
电厂网络安全检测评估
服务器开发工程师面试
mysql数据库指向
录屏服务器
win8 服务器管理器
计算机网络技术英文摘要