Nginx中Rewrite的使用
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,NginxNginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler
千家信息网最后更新 2025年01月24日Nginx中Rewrite的使用
Nginx 的源代码使用 2-clause BSD-like license。Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。
Nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好
Nginx优点
Nginx 可以在大多数 UnixLinux OS 上编译运行,并有 Windows 移植版。 Nginx 的1.4.0稳定版已经于2013年4月24日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。Nginx 的源代码使用 2-clause BSD-like license。Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。
一、Nginx环境准备
一台nginx服务器提供 www.accp.com 的网页。
1、安装rpm源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2、直接用yum安装nginx和bind
yum install nginx bind -y
3、DNS域名解析
vim /etc/named.conf
vim /etc/named.rfc1912.zones ##复制添加一段zone "accp.com" IN { type master; file "accp.com.zone"; allow-update { none; };};
cd /var/namedcp -p named.localhost accp.con.zonevim accp.con.zone
4、修改nginx配置文件
vim /etc/nginx/conf.d/default.conf
5、启动服务,关闭防火墙
systemctl stop firewalld.service setenforce 0systemctl start namedsystemctl start nginx
二、Rewrite 介绍
2.1、Rewrite跳转场景
URL 看起来更规范、合理;
企业会将动态URL地址伪装成静态地址提供服务;
网址换域名后,让旧的访问跳转到新的域名上;
服务端某些业务调整
2.2、Rewrite 实用场景
1、Nginx跳转需求的实现方式:
使用rewrite进行匹配跳转;
使用 if 匹配全局变量后跳转;
使用 location 匹配再跳转
2、rewrite放在 server { },if { };location{ }段中;
3、对域名或参数字符串:
使用 if 全局变量匹配;
使用 proxy_pass 反向代理
2.3、常用的正则表达式元字符
2.4、Rewrite 命令
语法:
flag标记说明:
last和break比较:
2.5、location 分类
分类:
location = patt { } [精准匹配]
location patt { } [一般匹配]
location ~ patt { } [正则匹配]
正则匹配的常用表达式:
2.6、location 优先级
相同类型的表达式,字符串长的会优先匹配;
按优先级排列:
= 类型
^~ 类型表达式
正则表达式(~ 和 ~*)类型
常规字符串匹配类型,按前缀匹配
通用匹配(/),如果没有其他匹配,任何请求都会匹配到
三、具体场景
3.1、场景一:基于域名的跳转
实验环境:公司旧域名www.accp.com,因业务需求有变更,需要使用新域名www.newaccp.com代替.
需求:
不能废除旧域名
从旧域名跳转到新域名,且保持其参数不变
1、修改nginx的配置文件
vim /etc/nginx/conf.d/default.conf//添加一段if ($host = 'www.accp.com') { rewrite ^/(.*)$ http://www.newaccp.com/$1 permanent; }//域名重定向:就是当访问www.wang.com时,将激动跳转到www.new.wang.com域名。//permanent:表示永久的意思。
2、DNS服务提供新域名的解析
vim /etc/named.rfc1912.zones//复制之前的accp域名声明段修改
cd /var/namedcp -p accp.com.zone newaccp.com.zone
3、重启服务
systemctl stop nginxsystemctl start nginxsystemctl restart named
验证:在win10的浏览器中输入新域名www.accp.com
3.2、场景二:基于客户端IP地址访问跳转
实验要求:今天公司业务版本上线,所有IP访问任何内容都显示一个固定维护页面,只有公司的IP才能访问正常。
公司IP地址:192.168.111.146
PC客户端:192.168.111.140
把上一个实验的nginx配置部分删除,以防影响下面的实验。
1、修改nginx的配置文件,重启服务
vim /etc/nginx/conf.d/default.conflisten 80;server_name www.accp.coom;#charset koi8-r;access_log /var/log/nginx/www.accp.com-access.log main; #设置是否合法的IP标志set $rewrite true;#判断是否为合法IPif ($remote_addr = "192.168.111.146"){ set $rewrite false;}#非法IP进行判断打上标记if ($rewrite = true){ rewrite (.+) /main.html;}#匹配标记进行跳转站点location = /main.html { root /usr/share/nginx/html;}systemctl stop nginxsystemctl start nginx
2、给 main.html 添加自定义页而内容
cd /usr/share/nginx/htmlvim main.html test网站 网站维护中,请稍等~~~
systemctl restart nginx
用公司的IP地址访问:
通过客户端IP地址访问:
3.3、场景三:基于旧、新域名跳转并加目录
例如:现在访问的是 http://bbs.accp.com ,现在需要将这个域名下面的发帖都跳转到 http://www.accp.com/bbs ,注意保持域名跳转后的参数不变。
1、在nginx配置文件中添加以下代码
vim /etc/nginx/conf.d/default.conf listen 80; server_name bbs.accp.coom; #charset koi8-r; access_log /var/log/nginx/www.accp.com-access.log; #添加一段 location /post { rewrite (.+) http://www.accp.com/bbs$1 permanent; }
2、修改域名,重启服务
cd /var/namedvim accp.com.zone #把里面的 www 换成 bbs 不然无法解析。systemctl restart nginxsystemctl restart namedecho "nameserver 192.168.111.145" > /etc/resolv.conf
3、在浏览器上访问 http://bbs.accp.com/post/a.html ,会帮我们自动跳转 http://www.accp.com/bbs/post/a.html , 此时域名跳转后的参数并没有变还是bbs
3.4、场景四:基于参数匹配跳转
例如:浏览器访问http://www.accp.com/100-(100|200)-100.html,会自动跳转到 http://www.accp.com 的页面。
1、修改nginx的配置文件,添加以下代码
listen 80; server_name www.accp.coom; #charset koi8-r; access_log /var/log/nginx/www.accp.com-access.log main; ## 添加一段 if ($request_uri ~ ^/100-(100|200)-(\d+).html$) { rewrite (.*) http://www.accp.com permanent; }
server_name www.accp.com;
if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
rewrite (.*) http://www.test.com permanent;
}
123456
2、DNS解析www。并重启服务
cd /var/namedvim accp.com.zonesystemctl restart nginxsystemctl restart named
3、在浏览器访问 http://www.accp.com/100-100-100.html,就会帮我们自动跳转到www.accp.com网站
3.5、场景五:基于目录下所有php文件跳转
例如,我们访问 http://www.accp.com/upload/1.php,会自动跳转到首页www.accp.com。
1、修改nginx的配置文件,添加以下代码
vim /etc/nginx/conf.d/default.conf listen 80; server_name www.accp.coom; #charset koi8-r; access_log /var/log/nginx/www.accp.com-access.log main;## 添加 location ~* /upload/.*\.php$ { rewrite (.+) http://www.accp.com permanent; }
2、重启服务
systemctl restart nginx
3、在浏览器上访问 http://www.accp.com/upload/1.php ,就会帮我们自动跳转到 www.accp.com网页。
域名
服务
场景
文件
配置
地址
服务器
类型
公司
参数
浏览器
表达式
代理
浏览
正则
站点
加一
实验
业务
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全+上市
软件开发企业怎么运行
数据库窗体视图有哪几个节
安庆网络技术
中国人民银行计算机网络安全
世界最佳软件开发
计算机网络技术的学习笔记
查看服务器 事件管理器
网络安全挑战赛决赛
中国电脑服务器是什么
杭州边浙网络技术有限公司
服务器的硬盘怎么拆
中恒云互联网科技有限公司
数据库下载访问pdf文件
网易服务器怎么开服
网络安全攻击表现形式
能源行业的网络安全培训
2028年上海网络安全竞赛
数据库 新技术
阿里云服务器更改系统
蚕食小说软件开发
制作软件开发平台
肥西软件开发技术项目实训中心
点播流媒体服务器
odbc数据库管理客户端
怎么查看金蝶是哪个服务器
数据库设计商品规格货量
已服务器连接已中断
天津服务器机柜价钱
查看本机数据库