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
表达式
域名
正则
目录
路径
变量
类型
功能
优先级
全局
参数
文件
首页
支持
合法
普通
内容
场景
字符
字符串
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
关于网络安全的分析
网络安全的微信公众号
肇庆销售软件开发费用是多少
安丘电力系统软件开发
检查人员名录数据库
第三次国土调查数据库使用软件
计算机网络技术多少分及格
银行业 网络安全报告
江苏企业软件开发服务费
医院网络安全排查整治情况
数据库访问太频繁
无锡市网络安全应急预案
北京萌芽网络技术有限公司
csgo直接加入服务器代码
事务性应用数据库
内网www服务器安全防护
数据库是长期存储在计算机中
不能插入汉字到数据库表
db2数据库中if
网络安全专业市场就业情况
网络安全行业的社会分析
永辉软件开发怎么样
怎么验证新建的数据库连接
网络安全的微信公众号
怎么样能称为软件开发大牛
威纶触摸屏数据库的建立
曲阜软件开发有限公司在线咨询
网络安全元素里面
数据库文件分离后还原不了
2018网络安全考试试卷2