千家信息网

Nginx中Rewrite的使用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,NginxNginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler
千家信息网最后更新 2026年11月02日Nginx中Rewrite的使用
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安全错误 数据库的锁怎样保障安全 哈尔滨大商圈互联网科技有限公司 智能科技公司是互联网公司吗 互联网科技未来 为想互联网科技 万达互联网科技 互联网科技公司介绍 富国互联网科技创新基金 互联网科技博主是什么意思 栖莱科技互联网股份有限公司 华夏互联网科技业 知域互联网科技有限公司大骗子 国大互联网教育科技有限公司工作 科技赋能视角下互联网保险发展 广东工业互联网大赛深圳学泰科技 张召忠谈中国互联网科技 上海创道互联网络科技有限公司 有人说阿里系是互联网科技企业 互联网风格科技公司名称 广东鹅鹅鹅互联网科技有限公司 网互联网络科技 圆梦互联网科技 中资互联网科技 互联网 科技公司 北京互联网科技 广州宏创互联网科技 深圳市运趣互联网科技有限公司 风投北京互联网科技 吉林省码上互联网科技电话 数字互联网科技有限公司 互联网科技快速发展优美句子
0