Nginx配置块location及rewrite详解(遗憾)

news2024/11/17 19:29:52

文章目录

  • 一、location配置块详解
    • 1.location 大致分为三类
    • 2.location 常用的匹配规则
    • 3.location 匹配的优先级
    • 4.location 匹配流程
    • 5.location 的实际使用
      • (1)直接匹配网站根目录首页
      • (2)处理静态文件请求
      • (3)通用规则
  • 二、if 模块常用的nginx全局变量
  • 三、rewrite详解
    • 1.rewrite简介
    • 2.rewrite实现跳转原理
    • 3.rewrite 执行顺序
    • 4.rewrite 配置字段格式
    • 6.rewrite 应用实例
      • (1)基于域名跳转
      • (2)基于客户端IP访问跳转
      • (3)基于旧域名跳转到新域名的指定路径下
      • (4)基于参数匹配的跳转

一、location配置块详解

1.location 大致分为三类

  • 精准匹配:location = / { … }
  • 一般匹配:location / { … }
  • 正则匹配:location ~ / { … }

2.location 常用的匹配规则

在这里插入图片描述

3.location 匹配的优先级

(1)精确匹配 = /…/…

(2)前缀匹配 ^~ /…/…

(3)正则匹配 ~ 或 ~* /…/…

(4)一般前缀匹配 /…/…

(5)通用匹配 /

4.location 匹配流程

如果只有一种匹配满足,互不影响则直接走匹配到的location。
如果存在多个形式的location,则按以下流程匹配:
(1)精确匹配成功,直接走精确;

(2)没有就看筛选出来的是前缀匹配还是一般匹配(比满足的路径长度);

——> 如果是一般匹配,就看有没有正则匹配,有正则,正则高;

——> 正则匹配多个符合,则在配置文件中靠前优先级的大。

——> 如果筛选出来是前缀匹配,那就忽略正则匹配;

(3)只有在精准、前缀、正则、一般 都没有匹配到的时候才会看通用匹配。

5.location 的实际使用

实际网站使用中,至少有三个匹配规则定义:

(1)直接匹配网站根目录首页

通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。可以是一个静态首页,也可以直接转发给后端应用服务器。

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

(2)处理静态文件请求

这是nginx作为http服务器的强项有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用。

location ^~ /static/ {
    root /webroot/;
}
 
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}

(3)通用规则

比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器,非静态文件请求就默认是动态请求

location / {
    proxy_pass http://tomcat_server;
}

二、if 模块常用的nginx全局变量

a r g s :这个变量等于请求行中的参数,同 args : 这个变量等于请求行中的参数,同 args:这个变量等于请求行中的参数,同query_string
$content_length : 请求头中的Content-length字段。
$content_type : 请求头中的Content-Type字段。
$document_root : 当前请求在root指令中指定的值。
$host : 请求主机头字段,否则为服务器名称。
$http_user_agent : 客户端agent信息
$http_cookie : 客户端cookie信息
$limit_rate : 这个变量可以限制连接速率。
$request_method : 客户端请求的动作,通常为GET或POST。
$remote_addr : 客户端的IP地址。
$remote_port : 客户端的端口。
$remote_user : 已经经过Auth Basic Module验证的用户名。
$request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。
$scheme : HTTP方法(如http,https)。
$server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。
$server_name : 服务器名称。
$server_port : 请求到达服务器的端口号。
$request_uri : 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
u r i :不带请求参数的当前 U R I , uri : 不带请求参数的当前URI, uri:不带请求参数的当前URIuri不包含主机名,如”/foo/bar.html”。
d o c u m e n t u r i :与 document_uri : 与 documenturi:与uri相同。

三、rewrite详解

1.rewrite简介

rewrite功能,就是使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。

    rewrite只能放在server{}、location{}、if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用,例如 http://www.abc.com/abc/bbs/index.php?a=1&b=2 只对/abc/bbs/index.php重写。

2.rewrite实现跳转原理

需要支持模块:ngx_http_rewrite_module

  • Nginx:通过模块支持URL重写、支持if条件判断,但不支持else(单分支);
  • 跳转:从一个 location跳转到另一个location,跳转最多可以执行10次,超过后nginx将返回500错误;
  • PCRE支持:perl 兼容正则表达式的语法规则匹配;
  • 重写模块 set 指令:自定义创建新的变量并设其值。

3.rewrite 执行顺序

首先(若存在)执行 server 块里面的 rewrite 指令。
——>执行 location 匹配。
——>(若存在)执行选定的 location 中的 rewrite 指令。

4.rewrite 配置字段格式

rewrite [flag];

  • regex :表示正则匹配规则;
  • replacement :表示跳转后的内容;
  • flag :表示 rewrite 支持的 flag 标记。

常用flag标记位
在这里插入图片描述

6.rewrite 应用实例

(1)基于域名跳转

业务转移,需要将旧域名www.abc.com跳转到新域名www.def.com上。

vim /usr/local/nginx/conf/nginx.conf
...
server {
    ...
    location / {
	    #添加域名重定向
        #$host为rewrite全局变量,代表请求主机头字段或主机名。
        if ($host = 'www.abc.com'){    
			#重写域名必须以协议开头(http或https),$1为前面正则表达式匹配的内容。
            rewrite ^/(.*)$ http://www.def.com/$1 permanent;
        }
        root   html;
        index  index.html index.htm;
    }
}

在这里插入图片描述

(2)基于客户端IP访问跳转

新版本上线,要求所有IP访问任何内容都显示一个固定维护页面,只有本公司IP访问正常。

vim /usr/local/nginx/conf/nginx.conf
...
server {
    ...
	#自定义变量用于判断是否是合法的IP标记
    set $rewrite true;							#设置变量$rewrite,变量值为boole值true
 
    #判断是否为合法IP
	if ($remote_addr = "192.168.116.20"){		#当客户端IP为192.168.80.10时,将变量值设为false,不进行重写
        set $rewrite false;
    }
 
	#除了合法IP,其它都是非法IP,进行重写跳转维护页面
    if ($rewrite = true){						#当变量值为true时,进行重写
        rewrite (.+) /weihu/index.html;			#将域名后边的路径重写成/weihu.html后转发(因为这里不重写域名所有可以不用从协议开头)
    }
 
    location = /weihu/index.html {
        root /var/www/html;						#网页返回/var/www/html/weihu/index.html的内容
    }
	
	location / {
        root   html;
        index  index.html index.htm;
    }
}

在这里插入图片描述
创建维护页面
在这里插入图片描述
使用非指定ip访问测试
在这里插入图片描述

(3)基于旧域名跳转到新域名的指定路径下

某站点下/bbs业务变更,需要存放在新域名的/old/bbs目录下。

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  bbs.abc.com www.abc.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.abc.com-access.log;
	
    #添加
	location /bbs {
        rewrite (.+) http://www.abc.com/old$1 permanent;	#这里的$1为位置变量,代表/bbs
    }
	
	location / {
        root   html;
        index  index.html index.htm;
    }
}

在这里插入图片描述
添加域名解析保证可以访问
在这里插入图片描述
将旧目录/bbs下的业务移动到新站点的/old/bbs下
在这里插入图片描述
访问旧域名下的/bbs(bbs.abc.com/bbs)
在这里插入图片描述

(4)基于参数匹配的跳转

利用 if {…} 对变量进行判断,实现访问根目录下的page1、page2、page3,都跳转到首页。
添加配置

vim /usr/local/nginx/conf/nginx.conf
server {
        #添加
        #$request_uri代表包含请求参数的原始URI,不包含主机名
        if ($request_uri ~* ^/page(1|2|3)\.html) {
            rewrite (.+) http://www.abc.com;
        }
 
}

在这里插入图片描述
测试访问(www.abc.com/page1.html)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/604672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

函数式接口相关知识点

这里写目录标题 函数式接口简介以及注意点函数式接口作为方法的参数函数式接口作为方法参数常用的函数式接口Supplier简介具体代码操作 Consumer简介具体代码演示演示1演示2 Predicate接口简介以及接口中的方法text和negate方法and和or方法Function方法简介具体操作1具体操作2 …

SQL语句之DDL语言

说明:DDL(Data Definition Language,数据定义语言),用来定义数据库对象(数据库、表),包括了数据库和表的创建、查询、使用和删除操作。 一、数据库操作 新安装的数据库,默认有以下四个数据库&…

计算机网络-数据链路层

概念 结点:主机、路由器 链路:结点间物理通道 数据链路:结点间逻辑通道,控制数据传输协议的硬件和软件加到链路上构成数据链路 帧:链路层的协议数据单元,封装网络层数据报 数据链路层负责通过一条链路从一…

银行转账问题(死锁)

本文主要讲述死锁的一个经典案例—银行转账问题,并对该问题进行定位、修复。 1. 问题说明 当账户A对账户B进行转账时, 首先需要获取到两把锁:账户A和账户B的锁。获取两把锁成功,且余额大于0,则扣除转出人的余额&…

我记不住的那些C语言的struct知识

背景: 最近在重学C语言,目的是为了能看懂操作系统的底层代码,也为后续使用C语言开发一个类似redis数据库的中间件做准备,于是又重新踏上了学习C语言的道路,早在上学期间就学习过C语言,但是很久都不用了&…

ssm学习-spring01

Spring_day01 今日目标 掌握Spring相关概念完成IOC/DI的入门案例编写掌握IOC的相关配置与使用掌握DI的相关配置与使用1,课程介绍 对于一门新技术,我们需要从为什么要学、学什么以及怎么学这三个方向入手来学习。那对于Spring来说: 1.1 为什么要学? 从使用和占有率看 Spri…

使用 ChatGPT API 构建系统(一):分类

今天我学习了DeepLearning.AI的 Building Systems with the ChatGPT API 的在线课程,我想和大家一起分享一下该门课程的一些主要内容。 下面是我们通过Openai API来访问ChatGPT模型的主要代码: import openai#您的openai的api key openai.api_key YOUR…

chatgpt赋能python:Python删除节点:从入门到实践

Python删除节点:从入门到实践 在任何编程语言中,删除节点都是一个极为常见的操作。在Python中,它同样非常重要,因为我们通常会使用Python处理各种数据结构,诸如树、链表等等。但是,删除节点并不总是一件容…

C++类和对象 -- 知识点补充

补充 const成员函数static成员友元内部类匿名对象拷贝对象时的一些编译器优化 const成员函数 将const修饰的成员函数称为const成员函数,const修饰类成员函数,实际是修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的成员进行修改。…

javaWeb ssh自习室管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh自习室管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,…

预报名通道已开启,2023第11届国际生物发酵展,8月4-6日上海见!

新机遇、新挑战、新发展 同期展会:酵素产品与益生产品展 制药机械与包装技术展 生化仪器及实验室设备展 合成生物技术与生物制造展 展会时间: 2023年8月4日 9:00-17:00 2023年8月5日 9:00-17:00 2023年8月6日 9:00-15:00 展会地点&#xff1a…

【数据结构】栈和队列选择题和面试编程题

目录 一、选择题 二、栈和队列的面试题 1、括号匹配问题 1.1 题目说明 1.2 题目解析 2、用队列实现栈 2.1 题目说明 2.2 题目解析 3、用栈实现队列 3.1 题目说明 3.2 题目解析 一、选择题 1、若进栈序列为 1,2,3,4 ,进栈过程中可以出栈,则下列不可能的…

软考A计划-电子商务设计师-信息安全知识

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

安全防御——IDS(入侵检测系统)

安全防御——IDS(入侵检测系统) IDS介绍为什么需要IDSIDS的工作原理IDS的工作过程第一步:信息收集第二步:数据分析 IDS的主要检测方法1、模式匹配(误用检测)2、统计分析(异常检测)3、…

chatgpt赋能python:Python创建venv的完全指南

Python创建venv的完全指南 在Python开发中,虚拟环境是一个非常有用的工具。它可以让我们在同一台计算机上拥有多个Python环境,而不会互相干扰。在本文中,我们将介绍如何使用Python创建venv(虚拟环境)。 什么是venv&a…

4-5.配置信息和路由信息

一、配置信息 app.run()的参数 参数1:host,如果我们不指定,默认值是127.0.0.1。参数2:port,如果我们不指定,默认值是5000。参数3:debug,调试模式,如果不指定&#xff0…

chatgpt赋能python:Python创建画布语句

Python 创建画布语句 在数据可视化的领域,画布(Canvas)是一个重要的概念。画布可以视为一个空白的像素或向量画布,用于绘制图表、图形、图像和动画等。Python 提供了多种创建画布的方式,其中包括使用第三方库和内置库…

哲学家就餐问题(死锁)

本文主要讲述死锁的一个经典案例—哲学家就餐问题,并对该问题进行修复。 1. 问题描述 看上图,有五位哲学家,每天循环做两件事:思考,吃面。吃面时每人面前都有一个盘子,盘子左边和右边都有一根筷子&#xff…

5.3 树和二叉树的抽象数据类型定义

博主简介:一个爱打游戏的计算机专业学生博主主页: 夏驰和徐策所属专栏:算法设计与分析 1.什么是树的抽象数据类型定义 树的抽象数据类型定义是指对树这种数据结构的一种抽象描述,其中包括了树的基本操作和性质。它定义了树作为一…

基于深度学习的目标姿态检测方法_kaic

目录 摘要 第1章 引言 1.1 研究背景和意义 1.2 国内外研究现状 1.3 主要内容 第2章 单目相机的目标姿态检测技术 2.1单目相机的工作原理 2.2目标姿态检测 2.3已有的目标姿态检测方法及其局限性 2.4本章总结 第3章 构建数据集 3.1 数据集来源 3.2数据集标注 3.3数据集分析 3.4本…