nginx的重定向(rewrite)问题及解读

 更新时间:2026年05月04日 11:00:13   作者:俄罗斯牛栏山  
文章主要介绍了Nginx中的location匹配、优先级及其与rewrite的区别,详细解释了location和rewrite的使用场景、语法、优先级、标志位和执行顺序等内容,并通过示例展示了基于域名和IP地址进行跳转的方法

1、location 匹配

location匹配的就是后面的URL,对访问的路径做访问控制或者代理转发

共有三个匹配:精确匹配、正则匹配、一般配

a、精确匹配

格式:location=/ 对字符串进行完全匹配,必须完全合

b、正则匹配

  • ^~:前缀匹配 以什么为开头,如果匹配成功,则不再匹配其它的正则匹配的location。
  • ~:区分大小写的匹配
  • ~*:不区分大小写
  • !~:区分大小写的区分
  • !~*:不匹配大小的取反

c、一般匹配(通用匹配)

  • location  /字符串

2、location 优先级以及原则

优先级:精确>正则>一般

优先级总结:

  • location= 最高,必须是完整路径
  • location= 1.jpg 每一位都需要一摸一样否则匹配不到
  • location= 完整路径 > location ^~ > location~ location ~* >location /部分起始位置 >location /

实际网站中的使用规则:

location= / {
root html;
index index.html index.htm index.php;
}

网站首页

第二个必选的规则:处理静态请求的页面

location^~ /static /{
root/web/sataic/
index index.html index.htm;
}

用来匹配静态页面

location ~* \.(jpg.gif|png|jpeg|css)$ {
root /web/pirturs/;
idnex index.html index.tml;
}

访问图片或者指定的后缀名

第三个规则,一般通用规则,用来转发.php .js 为后缀的动态请求到后端服务器(数据库)

location / {
proxy_pass
}

转发后端请求和负载均衡

3、rewrite重定向

rewrite就是把当前访问的页面跳转到其他页面

rewrite工作方式,通过nginx的全局变量或者是自定义变量,结合正则表达式和标志位实现url的重定向,对访问的域名或者域名内的URL路径地址重写。

4、rewrite 和 location区别

从功能看 rewrite 和 location都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理,还可以proxy_pass 到其他机器。

5、nginx的变量

  • $url 客户端另外的url地址
  • $host 请求的主机名
  • $http_user_agent :客户端请求的浏览器和操作系统
  • $http_referer:请求头的fefrr的信息模式当前页面来源的url
  • $remote_addr 客户端的IP地址
  • $remote_port 客户端的端口
  • $server_port 服务端的端口号
  • $server_addr 服务端的ip地址
  • $request_method 获取客户端请求的方法
  • $scheme请求的协议,要么是http 要么是https
  • x_forward_for :用来获取请求头当中客户端的真实ip地址,代理服务器添加,在代理服务器中指示客户端的ip地址
  • X-Real-IP: 客户端真实的ip地址

6、标志位

flag:(四种)

  • permanen 永久重定向。返回码是301 浏览器地址会显示跳转后的url地址 (方便搜索引擎可以被搜索到)
  • redirect 临时重定向,返回码302 浏览器地址会显示跳转后url地址
  • break 永久重定向 返回码也是301 但是他匹配到规则之后不会在向下匹配其他规则,url 也不会发生变化
  • last 重定向但是会继续向下匹配其他的location规则

7、rewrite的执行顺序

1、server模块的rewrite优先级最高

2、匹配location的规则

3、执行选定的location规则

8、rewrite的语法

rewrite 正则表达式 跳转后的内容 标志位;

在重定向的过程中使用last方式进行重定向,但是没有结束语,陷入了死循环,nginx会自动循环10次

last最多只能执行10次,超过10次没有结束就会停止,然后保存500

将结束语last改成break避免死循环

9、实验 基于域名进行跳转,老的不用了,但是依然可以访问,统统跳转到新的域名

宿主机 :192.168.10.20 域名www.xy 1 0 2.com

  if ( $host = 'www.xy102.com' ){
         rewrite ^/(.*)$ http://www.zlm.com/$1 permanent;

 在/etc/hosts目录下进行本地映射

在虚拟机自带的浏览器对域名www.xy102.com进行访问,域名跳转到www.zlm.com只域名跳转,内容不变

  

10、实验

基于ip进行跳转,公司有新业务上线,测试阶段,其他的ip只能显示维护中,只有本机能正常访问

设置一个变量名,变量名rewrite值是true,接下来判断ip是否合法,true进行跳转,如果是false跳转到错误页面

   set $rewrite true;
           if ( $remote_addr = "192.168.10.20" ){
        set $rewrite false;
}
        if ( $rewrite = true ){
        rewrite (.+) /error.html;
}
        location = /error.html {
        root html;
        index index.html;
}

error.html的内容 

使用宿主机192.168.10.20对192.168.10.20进行访问  

 

使用192.168.10.30对192.168.10.20进行访问

 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Ubuntu中Nginx虚拟主机设置的项目实践

    Ubuntu中Nginx虚拟主机设置的项目实践

    通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • Nginx服务器配置HTTPS nginx.config 配置文件(教程)

    Nginx服务器配置HTTPS nginx.config 配置文件(教程)

    下面小编就为大家分享一篇Nginx服务器配置HTTPS nginx.config 配置文件(教程),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 在ubuntu下为nginx配置支持cgi脚本的方案

    在ubuntu下为nginx配置支持cgi脚本的方案

    本文的需求:让nginx能够解析.cgi后缀的文件,相信会特意看这篇文章的人对CGI是什么及其作用已经有了足够的了解,所以在这里不再赘述,直接开始配置。
    2017-02-02
  • 配置nginx隐藏版本号的多种方法

    配置nginx隐藏版本号的多种方法

    在生产环境中,需要隐藏nginx等服务的版本信息,以免造成安全风险,下面小编给大家带来了两种方法,帮助大家学习配置nginx隐藏版本号的相关知识,需要的朋友可以参考下
    2022-01-01
  • Nginx中default_server指令问题详解

    Nginx中default_server指令问题详解

    nginx 的 default_server 指令可以定义默认的 server 出处理一些没有成功匹配 server_name 的请求,下面这篇文章主要给大家介绍了关于Nginx中default_server指令问题的相关资料,需要的朋友可以参考下
    2022-12-12
  • nginx控制连接数及访问速率的实现

    nginx控制连接数及访问速率的实现

    本文主要介绍了Nginx中ngx_http_limit_conn_module和ngx_http_limit_req_module模块的使用,用于控制连接数和请求速率,具有一定的参考价值,感兴趣的可以了解一下
    2024-12-12
  • Nginx泛解析到子目录后自动判断有无public目录详解

    Nginx泛解析到子目录后自动判断有无public目录详解

    这篇文章主要给大家介绍了关于Nginx泛解析到子目录后自动判断有无public目录的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来跟着小编一起学习学习吧。
    2017-08-08
  • 关于nginx报错405 not allowed解决方法总结

    关于nginx报错405 not allowed解决方法总结

    这篇文章主要给大家介绍了关于nginx报错405 not allowed解决方法的相关资料,nginx遇到post请求静态文件会得到405错误,文中通过代码介绍的非常详细,也给出了推荐方法,需要的朋友可以参考下
    2023-10-10
  • nginx常见问题整理和解决办法

    nginx常见问题整理和解决办法

    给大家详细整理了nginx常见的问题以及对应问题的处理办法,有需要的朋友参考一下吧。
    2017-12-12
  • Nginx中的location路径映射问题

    Nginx中的location路径映射问题

    这篇文章主要介绍了Nginx中的location路径映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论