Nginx Location配置详解

news2024/11/19 22:47:42

目录

  • 一、Location语法结构
    • 1、语法结构说明
    • 2、各个标识的含义和优先级
    • 3、配置请求的根目录
    • 4、替换请求的uri
  • 二、Location具体示例
    • 1、精确匹配
    • 2、正则匹配
    • 3、常规字符串匹配
  • 三、调试Location的小技巧

一、Location语法结构

1、语法结构说明

在Nginx官方文档中定义的location语法结构为:

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

其中uri变量是待匹配的请求字符串,可以是包含有正则表达式的字符串,称之为标准uri,也可以是不包含正则表达式的字符串,称之为正则uri。方括号里的部分为可选项,我们称之为匹配标识。

当不添加匹配标识时,Nginx服务器首先在server块的各个location块中搜索是否有标准uri和请求字符串匹配,如果有多个可以匹配,就记录匹配度最高的一个。

然后,服务器再用location块中的正则uri和请求字符串匹配,如果第一个正则uri匹配成功,结束搜索,并使用该location块处理请求。如果所有正则匹配全部失败,则用标准uri匹配到的匹配度最高的location块进行处理。

2、各个标识的含义和优先级

  • = 表示精确匹配,这个优先级也是最高的。
  • ^~ 表示 uri 以某个常规字符串开头,理解为匹配 url 路径即可。nginx 不对 url 做编码,因此请求为
    /static/20%/aa,可以被规则^~ /static/ /aa 匹配到(注意是空格)。
  • ~ 表示区分大小写的正则匹配。
  • ~* 表示不区分大小写的正则匹配。
  • !~!~*分别为区分大小写不匹配及不区分大小写不匹配的正则匹配。
  • / 通用匹配,任何请求都会匹配到,默认匹配。

优先级:精确匹配 > 正则匹配 > 通用匹配


3、配置请求的根目录

Web服务器接收到网络请求后,首先要在服务器端指定目录中寻找请求资源。在Nginx服务器中,root用来配置资源的根目录,如下:

location /images {
	root /nginx/images;
}

备注:当访问/images/1.jpg时,Nginx会在服务器上寻找路径为/nginx/images/images/1.jpeg的文件。

4、替换请求的uri

通过root指令我们可以指定资源访问的根目录,但是我们会发现访问的uri会附加到指定的文件目录下。通过alias指定,我们可以在访问服务器上资源时不保留访问前缀,如下:

location /images {
	alias /nginx/images;
}

备注:当访问/images/1.jpg时,Nginx会在服务器上寻找路径为/nginx/images/1.jpeg的文件。


二、Location具体示例

1、精确匹配

location = /50x.html {
	root /nginx/html;
}

备注:当访问/50x.html时,Nginx会在服务器上寻找路径为/nginx/html/50x.html的文件。

2、正则匹配

location ~* ^/images/(.+\.(png|jpg|jpeg|gif))$ {
   alias  /nginx/images/$1;
}

备注:当访问/images/1.JPEG时,Nginx会在服务器上寻找路径为/nginx/images/1.jpeg的文件,并且访问路径不区分大小写。

3、常规字符串匹配

location ~^ /static//(.+\.(html|htm)){
	alias /nginx/html/$1
}

备注:当访问/static/%20/index.html时,Nginx会在服务器上寻找路径为/nginx/html/1.html的文件。


三、调试Location的小技巧

一般如果文件访问失败,在错误日志里能看到错误日志提示,如下:

2024/05/11 15:15:28 [error] 16746#0: *125484 open() "/nginx/images/jpeg" failed (2: No such file or directory), client: 113.116.81.20, server: xxx.com, request: "GET /images/1.jpeg HTTP/1.1", host: "xxx.com"

错误日志的默认配置为:error_log logs/error.log error,也就是在logs/error.log文件中能看到相关错误提示,通过提示我们再进行配置的调整。

在这里插入图片描述

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

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

相关文章

大型动作模型 (LAM):AI 驱动的交互的下一个前沿

1.概述 现在人工智能中几个关键的领域,包括生成式人工智能(Generative AI)、大型动作模型(Large Action Models, LAM)、以及交互式人工智能(Interactive AI)。以下是对这些概念的简要解释和它们…

zabbix“专家坐诊”第238期问答

问题一 Q:请问一下 zabbix 如何监控服务器端口的出和入流量?就类似iftop这样的。 A:可以用snmp去监控。 问题二 Q:各位有什么工具能导出zabbix主机列表成execl格式吗? A:进mysql,到hostid,然…

docker runc升级1.1.12

上传runc-1.1.12制品至中控机 874e970eaa932a97de9888344ae08f24 runc.arm64 将所有节点的runc文件备份 所有节点(包括master+node) vim host [all] 10.1.0.183 ansible_password=Bigdata@Ksyun123 ansible_user=root ansible_port=22 10.1.0.249 ansible_password=Bigdata…

大模型常用微调数据集

文章目录 指令微调数据集人类对齐数据集 为了增强模型的任务解决能力,大语言模型在预训练之后需要进行适应性微调,通常涉及两个主要步骤,即指令微调(有监督微调)和对齐微调。 指令微调数据集 在预训练之后&#xff0c…

RobbitMQ基本消息队列的消息发送过程

RabbitMQ: One broker to queue them all | RabbitMQ RabbitMQ官网 SpringAmqp的官方地址:Spring AMQP 代码示例:对着代码看应该能看明白 publisher:消息发送者的代码示例 package cn.itcast.mq.helloworld;import com.rabbitmq.client.Channel; import com.rabb…

从技术到管理:做了项目经理之后我明白了这几件事

自从我踏入项目管理这个领域,成为了一名项目经理,我深感这个角色与之前纯粹做技术时是不同的。 一、技术与项目管理的鸿沟 我曾是一名技术人员,那时的问题明确,解决方案也相对直接。然而,当我成为项目经理后&#x…

uniapp下拉选择组件

uniapp下拉选择组件 背景实现思路代码实现配置项使用尾巴 背景 最近遇到一个这样的需求,在输入框中输入关键字,通过接口查询到结果之后,以下拉框列表形式展现供用户选择。查询了下uni-app官网和项目中使用的uv-ui库,没找到符合条…

水表智能抄表系统是什么?

水表智能抄表系统是一种现代化水资源保护专用工具,它利用先进的物联网、云计算和大数据剖析,完成了智能抄表、实时监控系统、数据分析等作用,大大提高了水务管理的效率和精确性。 1.功能特点 1.1远程控制自动抄表 传统水表抄水表方法采用人…

Fcos源码训练编译问题

训练fcos代码时出现问题 ImportError: cannot import name ‘_C’ 原因是没有对代码进行编译 运行python setup.py develop --no-deps进行代码编译 编译过程中出现报错: fcos_core/csrc/cuda/ROIAlign_cuda.cu:5:10: fatal error: THC/THC.h: No such file or dire…

Linux学习笔记7---仿STM32自建寄存器库

为了开发方便,ST 官方为 STM32F103 编写了一个叫做 stm32f10x.h 的文件,在这个文件里面定义了 STM32F103 所有外设寄存器。而有些芯片是没有这种寄存器库的,在没有的情况下要学会自己建立一个寄存器库。NXP 官方并没有为 I.MX6UL 编写类似 st…

半小时搞懂STM32面经知识——GPIO

1.GPIO 1.1 什么是GPIO? 通用输入输出端口,用于与外设进行数字信号通信。 1.2 GPIO有几种工作模式?请描述它们各自的特点和用途 输入输出各有四种 输入:浮空,上拉,下拉,模拟 输出&#xff1…

N1077B keysight 是德 光/电时钟恢复设备,参数

Keysight N1077B是一款光/电时钟恢复设备,支持115 MBd至24 GBd的数据速率范围,适用于多模和单模光信号以及电信号。该设备能够处理PAM4和NRZ两种类型的数据信号,并提供符合标准的时钟恢复功能。 型 号:N1077B/A 名 称&#xff1a…

Python自动化测试面试题 —— Selenium篇!

Selenium中有几种等待 隐形等待/智能等待 dr.implicitly_wait() 显性等待 WebDriverWait 强制等待 time.sleep() Selenium中有哪些定位方式 8种 tag 三大基本属性 id/name/class_name 链接 link text/partial link text 高级 css selector/xpath 弹框怎么处理 4种弹…

论文精读-Transformer(Attention is All You Need)

文章目录 论文精读-Transformer(Attention is All You Need)1.Transformer 整体结构2. Transformer 的输入2.1 单词 Embedding2.2 位置 Embedding 3. Self-Attention(自注意力机制)3.1 Self-Attention 结构3.2 Q, K, V 的计算3.3 Self-Attent…

Android NDK开发(一)生成指定平台的ndk及根据native接口生成jni接口

为了初步了解Android NDK开发&#xff0c;本文记录了Android Studio使用过程中的部分内容。 本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统学习&#xff0c;梳理总结后写下文章&#xff0c;对音视频相关内容感兴趣的读者&#xff0c;可以点击观看课程…

Android Studio(AS)使用别人的项目与gradle包并运行项目

一、问题描述 在进行AS开发时&#xff0c;我们可能会使用到别人的项目&#xff0c;但发现别人把项目发给我们后会发现gradle项目同步失败o(≧口≦)o&#xff0c;此时计有三&#xff1a; 1.横行霸道、豪取抢夺&#xff1a;直接空降到项目人那里&#xff0c;强他的电脑占为己有…

在 Navicat 17 创建一个数据字典

即将于 5 月 13 日发布的 Navicat 17&#xff08;英文版&#xff09;添加了许多令人兴奋的新功能。其中之一就是数据字典工具。它使用一系列 GUI 指导你完成创建专业质量文档的过程&#xff0c;该文档为跨多个服务器平台的数据库中的每个数据元素提供描述。在今天的博客中&…

微信小程序开发【Coffee Shopping】(1)

1.环境准备 微信开发者工具&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 前端常用网站集合&#xff1a;http://www.wwp666.cn/ 微信小程序开发文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/quicksta…

Prompt|Kimi高阶技巧,99%的人都不知道

大家好&#xff0c;我是无界生长。 今天分享一条咒语&#xff0c;轻松让Kimi帮你生成流程图&#xff0c;学会了的话&#xff0c;点赞收藏起来吧&#xff01; 效果展示 我们演示一下让kimi帮忙绘制 关注微信公众号“无界生长”的流程图&#xff0c;最终效果图如下所示 效果还不…

基本QinQ

拓扑图 配置 开启LLDP功能&#xff0c;查看是否能通过QinQ隧道透传 sysname AR1 # lldp enable # interface GigabitEthernet0/0/0.10dot1q termination vid 10ip address 12.1.1.1 255.255.255.0 arp broadcast enable # sysname AR2 # lldp enable # interface GigabitE…