nginx 解决跨域问题第一篇:关于location的知识点(匹配规则,反斜杠用法)

news/2024/7/7 21:42:18 标签: nginx, 服务器, 运维

nginx的location指令用于匹配请求的URL,并指定相关的配置项。它的匹配规则如下

location匹配的的nginx变量是: $request_uri ;
location匹配种类:  格式:location [ 空格 | = | ~ | ~* | !~ | !~* | @ ] /uri/ {} ;
详解如下:
1.精准匹配(如果找到,立即停止搜索并立即处理此请求): 用"="指定一个精确的URL,只有当请求的URL与指定的URL完全匹配时,才会应用相关的配置项。
例如:location = /test 会匹配到请求URI为"/test"的请求。

2.前缀匹配:用"^~"指定一个前缀字符串,当请求的URI以指定的字符串开头时,会应用相关的配置项。
例如:location ^~ /images/ 会匹配到请求URI以"/images/"开头的请求。

3. 正则匹配:用"~""~*"指定一个正则表达式,当请求的URI与正则表达式匹配时,会应用相关的配置项。其中,"~"表示区分大小写,"~*"表示不区分大小写。反推"!~"代表区分大小写不匹配 , "!~*"代表不区分大小写不匹配。
例如:location ~* \.(jpg|jpeg|gif)$ 会匹配到请求URI以".jpg"".jpeg"".gif"结尾的请求。

4.最长前缀匹配"/"(表示通用匹配,任何请求都会匹配到):如果没有匹配到精确匹配、前缀匹配或正则匹配的location块,则会使用最长前缀匹配。
例如:location / 会匹配到任何请求。

5. "@"  指定一个命名的location,一般只用于内部重定向请求。例如 error_page, try_files

备注:^~优先级高于其他正则匹配

nginx代理中/反斜杠用法

这里通过示例展示不同斜杠的用法情况

测试用例

    nginx 服务器及端口 127.0.0.1:80
    后端服务:127.0.0.1:8080
    测试url: http://127.0.0.1:80/test/api/abc

示例1

location /test/ {
   proxy_pass http://127.0.0.1:8080/;
}

实际访问的端口服务:http://127.0.0.1:8080/api/abc

示例2

location /test {
   proxy_pass http://127.0.0.1:8080/;
}

实际访问的端口服务:http://127.0.0.1:8080//api/abc

示例3

location /test/ {

   proxy_pass http://127.0.0.1:8080;

}

实际访问的端口服务:http://127.0.0.1:8080/test/api/abc

示例4

location /test {

   proxy_pass http://127.0.0.1:8080;

}

实际访问的端口服务:http://127.0.0.1:8080/test/api/abc

示例5

location /test/ {

   proxy_pass http://127.0.0.1:8080/server/;

}

实际访问的端口服务:http://127.0.0.1:8080/server/api/abc

示例6

location /test {

   proxy_pass http://127.0.0.1:8080/server/;

}

实际访问的端口服务:http://127.0.0.1:8080/server//api/abc

示例7

location /test/ {

   proxy_pass http://127.0.0.1:8080/server;

}

实际访问的端口服务:http://127.0.0.1:8080/serverapi/abc

示例8

location /test {

   proxy_pass http://127.0.0.1:8080/server;

}

实际访问的端口服务:http://127.0.0.1:8080/server/api/abc

规则总纳
上边location的"/"仅用来匹配测试url,不具备特殊意义。

下边proxy不接目录时,若没有"/",最终地址要拼接 location

下边不接目录时,若有"/",location不拼入最后结果

下边接目录,也视为proxy_pass端口后有"/“的情况,所接目录后的”/"不具备特殊意义,原样接入最终地址(有接有,无接无)。

简单总结如下

上边有"/",下边端口有”/“,不接location。下边目录原封不动拼入最后结果(下边没目录,但有”/",可视为目录为空)
下边端口后没"/"(不管上边没有没有),要拼接location

http://www.niftyadmin.cn/n/5270357.html

相关文章

如何通过 SSH 访问 VirtualBox 的虚机

VirtualBox 是一款免费虚机软件。在用户使用它安装了 linux 以后,它默认只提供了控制台的管理画面。 直接使用控制台管理 Linux 没有使用诸如 putty 或者 vscode 这样的 ssh 远程管理工具方便。那么可不可以直接使用 ssh 访问 VirtualBox 上的 Linux 呢&#xff1f…

java --- 异常

目录 一、异常体系介绍 二、异常的作用 三、异常处理方式 3.1 捕获异常 2.1 灵魂一问: 如果try中没有遇到问题,如何执行? 2.2 灵魂二问:如果try中可能会遇到多个问题,怎么执行? 2.3 灵魂三问&#x…

【Python】Python数据四舍五入两种方法区分

问题背景: 当我们用python对数据进行四舍五入的时候,需要注意有几种情况,通常我们使用的是round方法,例如: numround(1.456) 解决方法: 但是有的时候我们需要控制四舍五入的输出形式,主要有…

如何在Windows上安装 PHP?

安装 PHP 的步骤会根据你使用的操作系统而有所不同。以下是在一些主流操作系统上安装 PHP 的基本指南: 在 Windows 上安装 PHP: 下载 PHP: 访问 PHP for Windows 网站。 下载你需要的 PHP 版本(通常是线程安全版本)。…

如何在PHP中进行安全的密码存储?

在PHP中进行安全的密码存储是确保用户密码不会在存储和传输过程中泄露的关键步骤。以下是一些实现安全密码存储的最佳实践: 使用密码哈希: 绝对不要将原始密码明文存储在数据库中。相反,使用密码哈希算法对密码进行哈希处理,并将哈…

LeetCode 2132. 用邮票贴满网格图:二维前缀和 + 二维差分

【LetMeFly】2132.用邮票贴满网格图:二维前缀和 二维差分 力扣题目链接:https://leetcode.cn/problems/stamping-the-grid/ 给你一个 m x n 的二进制矩阵 grid ,每个格子要么为 0 (空)要么为 1 (被占据&…

网络时间服务器

本章主要介绍网络时间服务器。 使用chrony配置时间服务器 配置chrony客户端向服务器同步时间 1 时间同步的必要性 一些服务对时间要求非常严格,例如,图所示的由三台服务器搭建的ceph集群。 这三台服务器的时间必须保持一致,如果不一致&#…

不想学习只想摆烂系列之GUIjava项目

知道GUI框架怎么写就行 1.定义jFRame 2.分开写测试类 3.给几个按钮 4.负责提供测试器 这样就把框架打好了 主程序-继承某个类 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class RadioB…