nginx的location与rewrite作用与用法

news2024/11/25 14:47:27

nginx rewrite 重写跳转

location 匹配uri

location 匹配的规则和优先级。重点

nginx常用的变量,要求掌握

rewrite:重定向功能。掌握,理解。

local

location 匹配:

正则表达式:

元字符:

.:任意单个字符,包括汉字 \ .(表示就是一个点)

^:起始位置

$:结束位置

*:匹配前面的字符0次或者多次

+:匹配前面的字符一次或者多次

?:一次或0次

\:转义符

[0-9A-Za-z]:匹配0-9,A-Z,a-z

[a]:只能匹配a

{n}:连续重复出现几次

{n,m}:最少出现几次,最多几次

():分组

|:逻辑或

正则表达式:匹配的是文件内容。

URI:统一资源标识符,是一种字符串标识,主要用于标识抽象的或者物理资源

文件 图片 视频

nginx当中:uri匹配的是www.ky30.com/images/1.jpg

location 就是用来匹配URI的:

1、精确匹配:location = / {……}

2、正则匹配:location ~ / {……}

3、一般匹配:location / {……}

匹配的规则:

=:精确匹配,也就是完全匹配,错一个字都匹配不到,必须完全一致。

^~:匹配普通字符,前缀匹配

~:区分大小写的匹配

~*:不区分大小写的匹配

!~:区分大小写的匹配,取得是逻辑非,取反

!~*:不区分大小写的取反

location = / {   
    [ configuration A ]
}

location / {             #可以匹配到子目录的内容
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

The “/” request will match configuration A, the “/index.html” request will match configuration B, the “/documents/document.html” request will match configuration C, the “/images/1.gif” request will match configuration D, and the “/documents/1.jpg” request will match configuration E.

location匹配原则:越精确,越匹配(优先级越高)

匹配的优先级:

越精确,优先级越高。

=:精确匹配优先级最高

~:正则次之

/:通用的优先级最低

优先级:

location = > location ^~ >location ~* >location /test/ > location /

一旦匹配到了之后,不再向下匹配。

生产中location匹配规则:

1、第一个必选规则:

location =/ {}

直接匹配根网站。通过域名访问网站首页是最多的,使用精确匹配可以加快处理速度。首页。

2、第二个规则:

location ^~ /static/ {}

处理静态文件的请求,目录匹配,任选一个。

3、第三个规则:

location ~* \ .(gif|jpg|png|css)

匹配图片用的

4、第四个规则:

location / {

proxy_pass #指定代理,反向代理,转发动态请求。 .php .jsp的请求,发到后端。

}

location /test/ {

}

rewrite

rewrite:重写,重定向

使用nginx的全局变量或者是自己设置的变量,结合正则表达式和标志位实现url的重定向。

nginx的内置变量:

$uri: 请求的URI,不包含主机和查询参数。

$request_uri: 请求的URI,包含主机和查询参数。

$args: 查询参数部分,即?后面的内容。

$query_string: 整个查询字符串,包含?。

$host: 请求的主机名。

$http_user_agent: 请求的User-Agent头信息,用于表示请求的客户端浏览器和操作系统。

$http_referer: 请求的Referer头信息,表示当前页面的来源URL。

$remote_addr: 客户端的IP地址。

$remote_port: 客户端的端口号。

$server_addr: 服务器的IP地址。

$server_port: 服务器的端口号。

$request_method: 请求的HTTP方法,如GET、POST、等。

$content_type: 请求的Content-Type头信息,表示请求体的MIME类型。

$content_length: 请求的Content-Length头信息,表示请求体的长度。

$scheme: 请求的协议,通常是http或https。

$request_filename: 请求的文件名,用于指定请求的实际文件路径。

$document_root: 当前请求的根目录。

$server_name: 服务器名称,用于匹配server块的server_name指令。

x_forwarded_for:用于获取HTTP请求头中的X-Forwarded-For字段的值。 X-Forwarded-For是一个常见的HTTP请求头,通常由代理服务器添加,用于指示原始客户端的IP地址。 proxy_set_header X-Forwarded-For $remote_addr; 这个是传给后端。

X-Real-IP:头部为客户端真实IP地址 proxy_set_header X-Real-IP $remote_addr; proxy_set_header指令来设置X-Real-IP头部的值为$remote_addr,即客户端的真实IP地址。 这样,Nginx会将客户端的真实IP地址作为X-Real-IP头部的值传递给后端服务器。

 

location / {

root html;

index index.html index.htm;

default_type text/plain;

return 200 "way:$request_method";

}

default_type text/plain; 声明之后,才会在页面中展示。

#表示如果没有在其他地方显示设置:content-type的头字段,默认响应为text/plain;纯文本格式。会以本地的形式展示给你。

text/html:默认的响应类型,也就是我们说的页面

text/plain:纯文本格式,类似于.txt文件

text/css:css样式表的类型,css

text/javascript:java脚本,.js。前端文件,也可以理解是java解析的程序文件。

rewrite执行顺序:

1、执行server块当中的rewrite的指令

2、执行location匹配

3、如果location当中还有rewrite,继续执行

不停的rewrite,就会陷入死循环,只能10次,然后报错,报错的状态码:500

rewrite的语法:

rewrite <regex> <replacement> [flag]

rewrite:开始重定向

regex:正则匹配的规则

replacement:表示跳转后的内容,你要重定向的url

flag:标志位

标志位有四种类型:

永久重定向:301,永久性的变更url,搜索引擎会转移他的权重以及排名到新的url。

临时重定向:302,临时性的变更url,用于短期变更(网站维护,或者升级更新)。搜索引擎是不会转移权重和排名到新的url。

//304 表示读取的是本地缓存,读的统统都是缓存!!!

permanent:永久重定向:返回码301

 redirect:临时重定向,显示的返回码:302

break:是重定向,但是不会改变url,而且只会请求一次,跳出当前匹配,即刻终止。

当客户端向web服务器请求/test/时,web服务器内部自动转换到,重定向的url响应内容,无需请求第二次。

last:本条规则,匹配完成后,继续向下匹配,只要有last,就继续匹配。配置的时候需要注意,防止死循环

rewrite or internal redirection cycle while processing #写成死循环,一直在匹配location,10次,返回码500

看你匹配的是哪一个,就会从哪里匹配。

基于域名的跳转
现在公司旧域名www.kgc.com有业务需求变更,需要使用新域名www.benet.com代替,但是旧域名不能废除,
需要跳转到新域名上,而且后面的参数保持不变。

vim /usr/local/nginx/conf/nginx.conf
server {
    listen       80;
    server_name  www.kgc.com;                                       #域名修改    
    #charset utf-8;
    #access_log  /var/log/nginx/kgc.com-access.log;                  #日志修改
    location / {
    #添加域名重定向
        if ($host = 'www.kgc.com'){                                #$host为rewrite全局变量,代表请求主机头字段或主机名
            rewrite ^/(.*)$ http://www.benet.com/$1 permanent;       #在重定向时,$1表示请求的URL
        }
        root   html;
        index  index.html index.htm;
    }
}

echo "192.168.233.61 www.kgc.com www.benet.com" >> /etc/hosts
systemctl restart nginx

基于ip地址的跳转:页面维护,或者升级。

192.168.233.61能够访问,其他人访问显示维护

今天公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,
只有公司 IP :192.168.233.61访问正常。
vim /usr/local/nginx/conf/nginx.conf
server {
    listen       80;
    server_name  www.kgc.com;                       #域名修改    
    charset utf-8;
    access_log  /var/log/nginx/kgc.com-access.log;  #日志修改

    #设置是否合法的IP标记
    set $rewrite true;                             #设置变量$rewrite,变量值为boole值true
    
    #判断是否为合法IP
    if ($remote_addr = "192.168.233.61"){          #当客户端IP为192.168.233.61时,将变量值设为false,不进行重写
        set $rewrite false;
    }
                                                   #除了合法IP,其它都是非法IP,进行重写跳转维护页面
    if ($rewrite = true){                          #当变量值为true时,进行重写
        rewrite (.+) /error.html;                   #重写在访问IP后边插入/error.html,例如192.168.233.22/error.html
    }
    location = /error.html {
        root html;                                 #网页返回html/error.html的内容
    }
    
    location / {
        root   html;
        index  index.html index.htm;
    }
}

systemctl restart nginx

只有 IP 为 192.168.233.61 能正常访问,其它地址都是维护页面

systemctl restart nginx.service 

基于目录下所有 php 结尾的文件跳转
vim /usr/local/nginx/conf/nginx.conf
server {
    listen       80;
    server_name  www.test.com;        #域名修改    
    charset utf-8;
    access_log  /var/log/nginx/www.test.com-access.log;
    
    location ~* /upload/.*\.php$ {
        rewrite (.+) http://www.test.com permanent;
    }
 
    location / {
        root   html;
        index  index.html index.htm;
    }
}
systemctl restart nginx

访问http://www.test.com/upload/123.php,直接跳转到www.test.com
 

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

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

相关文章

安达发|国内APS系统崛起:解析近几年火爆原因

近年来&#xff0c;APS(高级计划与排程)系统在国内内迅速崛起&#xff0c;成为企业提高生产效率和管理水平的重要工具。这一现象的背后&#xff0c;有多种原因共同推动着APS系统的普及和发展。 首先&#xff0c;技术创新是APS系统能够快速发展的关键因素。随着大数据、云计算、…

如何卸载SOLIDWORKS软件?

本文将为您提供一份简易指南&#xff0c;介绍如何正确卸载SOLIDWORKS软件&#xff0c;并分享一些注意事项&#xff0c;确保您的卸载过程顺利进行。 SOLIDWORKS软件作为一款强大的三维设计和工程分析工具&#xff0c;为许多工程师提供了优良的创作平台。然而&#xff0c;有时候我…

Element组件浅尝辄止4:Button组件

Button按钮组件&#xff1a;用途太广泛了&#xff0c;几乎参与到了日常开发中的方方面面 1.如何使用&#xff1f;How? //使用type、plain、round和circle属性来定义 Button 的样式。<el-row><el-button>默认按钮</el-button><el-button type"primar…

LeetCode150道面试经典题-移除元素(简单)

目录 1.题目 2.解题思路 3.解题代码 1.题目 移除元素 给你一个数组 nums 和一个值 val&#xff0c;你需要原地移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素…

mac-右键-用VSCode打开

1.点击访达&#xff0c;搜索自动操作 2.选择快速操作 3.执行shell脚本 替换代码如下&#xff1a; for f in "$" doopen -a "Visual Studio Code" "$f" donecommand s保存会出现一个弹框&#xff0c;保存为“用VSCode打开” 5.使用

Prometheus流程图(自绘)-核心组件-流程详解

阿丹手绘流程图&#xff1a;图片可能有点小查看的时候放大看看哈&#xff01; prometheus核心组件 prometheus server Prometheus Server是Prometheus组件中的核心部分&#xff0c;负责实现对监控数据的获取&#xff0c;存储以及查询。Prometheus Server可以通过静态配置管理…

Apikit 自学日记:API 异常监控-监控报告

在 api 管理中&#xff0c;查看 api 异常监控的监控报告&#xff0c;在 apikit 中也是常用的功能&#xff0c;通常你可以在流程综合报告页中看到当前流程在选定时间段内的整体监控情况... 在 APIkit 中监控报告有这几种类别&#xff1a; 单接口监控报告 流程监控报告 项目监控…

SQL注入之Oracle注入

SQL注入之Oracle注入 7.1 SQL注入之Oracle环境搭建 前言 Oracle Database&#xff0c;又名Oracle RDBMS&#xff0c;或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统…

ardupilot 三维向量如何进行旋转

目录 文章目录 目录摘要1.三维向量的旋转2.如何理解上面公式3.ardupilot中代码应用4.结论摘要 本节主要记录ardupilot中如何实现一个三维向量从一个坐标系转换到另外一个坐标系的过程,欢迎批评指正!!! 1.三维向量的旋转 这里需要特别注意,我们有时候需要把R系往B系转换,…

【C语言学习】函数的定义和调用

一、函数定义 要有返回类型、函数名和函数体 二、调用函数 函数名&#xff08;函数值&#xff09;&#xff1b; &#xff08;&#xff09;起到表示函数调用的重要作用&#xff0c;即使没有参数也需要&#xff08;&#xff09; 若有参数&#xff0c;则需要给出正确的数量和顺序…

【如何在Linux环境下进入Docker容器中的MySQL】

如何在Linux环境下进入Docker容器中的MySQL 查看所有容器 docker ps进入容器 docker exce -it {NAMES/CONTAINER ID} bash根据容器别名获取容器ID都可以进入到容器当中 3. 输入MySQL的账号和密码登录MySQL mysql -uroot -p{password}

Linux下 时间戳的转化

Linux下一般用date 记录当前时间&#xff0c;尤其是我们需要保存测试log的时候&#xff0c;或者设计一个跑多长时间的脚本都需要时间戳。下面看一下平时最常用的几种写法 1 date “%Y-%m-%d %H:%M” 显示具体时间 2 修改时间 date -s 3 date %s :当前时间的时间戳 显示具体时…

Maven介绍,部署在eclipse中

目录 一.Maven介绍 1&#xff0c;什么是maven&#xff1f; 2. 为什么maven会在企业中大量使用&#xff1f; 3.没有使用maven的前后区别? 4.maven在Java开发中的实际效果图 二.maven部署在eclipse中 1.下载maven在其官方网址下载&#xff08;当然实际下载也要根据个人的…

速度提升13%?SK海力士新一代芯片组即将发布,搭载LPDDR5T 内存

据称SK海力士最新LPDDR5T内存已在联发科的下一代移动平台&#xff08;可能是天玑9300&#xff09;上成功验证。 SK海力士宣布&#xff0c;联发科即将于今年内发布最新一代旗舰移动芯片组&#xff0c;其中包括速度高达9.6Gbps的LPDDR5T内存。与前一代海力士LPDDR5X相比&#xff…

htmlCSS-----案例展示

目录 前言 作品效果 html代码 CSS代码 图片资源 前言 在学习html过程中我们要试着去写写一些案例&#xff0c;通过这些案例让我们更加熟悉代码以及丰富我们的经验&#xff0c;下面是我个人写的一个案例&#xff0c;代码和图片也给出了大家&#xff0c;你们可以参考参考。…

TOMCAT部署及优化(Tomcat配置文件参数优化,Java虚拟机(JVM)调优)

TOMCAT tomcat &#xff1a;是一个开放源代码的web应用服务器&#xff0c;基于java代码开发的。也可以理解为tomacat就是处理动态请求和基于java代码的页面开发。可以在html当中写入java代码&#xff0c;tomcat可以解析html页面当中的java&#xff0c;执行动态请求&#xff0c;…

绽放趋势:Python折线图数据可视化艺术

文章目录 一 json数据格式1.1 json数据格式认识1.2 Python数据和Json数据的相互转换 二 pyecharts模块2.1 pyecharts概述2.2 pyecharts模块安装 三 pyecharts快速入门3.1 基础折线图3.2 pyecharts配置选项3.2.1 全局配置选项 3.4 折线图相关配置3.4.1 .add_yaxis相关配置选项3.…

LC-杨辉三角

LC-杨辉三角 链接&#xff1a;https://leetcode.cn/problems/pascals-triangle/submissions/ 上图就是一个杨辉三角&#xff0c;每个数等于他左上角的数与右上角的数之和。 第一行就是一个1&#xff1b;第二行是两个1&#xff1b;第三行的2就是它肩膀上两个1之和,其余的类似。…

最全网络安全(黑客)学习路线

在各大平台搜的网安学习路线都太粗略了。。。。看不下去了&#xff01; 我把自己整理的系统学习路线&#xff0c;拿出来跟大家分享了&#xff01;点击查看详细路线图 建议的学习顺序&#xff1a; 一、网络安全学习普法&#xff08;心里有个数&#xff0c;要进去坐几年&#xf…

初阶C语言-操作符详解(下)

&#x1f31e; “等春风得意&#xff0c;等时间嘉许&#xff01;” 接下来&#xff0c;我们把操作符没学完的继续学完&#xff01; 操作符详解 6.2sizeof和数组 7.关系操作符8.逻辑操作符9.条件操作符10.逗号表达式11.下标引用、函数调用和结构成员12.表达式求值12.1隐式类型转…