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

Nginx配置文件中location配置 nginx中location配置/ 阅读详情

写在前面

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 ] 
}

使用Nginx配置location块 Nginx是一款高性能的Web服务器软件,它的配置文件中的location块用于定义特定URL路径的处理规则。在实际使用中,可以根据需求灵活配置location块,实现各种不同的功能。需要注意的是,Nginx的配置文件支持嵌套的location块,可以进一步细分URL路径的处理规则。指令用于实现反向代理功能,将客户端的请求转发给后端服务器,并将后端服务器的响应返回给客户端。通过以上步骤,我们成功地使用Nginx配置了location块,并实现了不同URL路径的处理规则。完成配置文件的编辑后,保存并退出。 阅读详情

相关推荐

Nginx Location 配置详解与示例代码

综上所述,Nginx的location配置是非常强大和灵活的,它可以根据URL的匹配模式指定不同的处理规则。Nginx的location指令是其中一个重要的配置项,它用于匹配请求的URL,并指定相应的处理逻辑。表示根路径,当请求的URL匹配到根路径时,Nginx将执行该location块中定义的处理逻辑。除了精确匹配和正则表达式匹配外,Nginx的location指令还支持使用前缀匹配和通配符匹配。当请求的URL匹配到相应的匹配模式时,Nginx将执行对应location块中定义的处理逻辑。

UtuVerilog的博客 560

Nginx之location详解

root location中root指定的只是相对路径,需要和路径结合起来映射地址,比如 location ^~/static/ { ## 这里的root需要和路径结合使用,即是映射的文件位置为 /usr/alyingboy/static root /usr/alyingboy/; index index.html } 此时我们访问 IP/static/a.css ,那么就会找到 /usr/alyingboy/static/a.css alias alias指定的是绝对路径,不会和loc

qq_40907977的博客 7万+

WinInet 编程:MFC 中的互联网编程

WinInet 是一套 Windows API(应用程序编程接口),用于实现互联网应用程序的网络通信和数据传输。WinInet 抽象了底层网络协议和硬件细节,为程序员提供了一套统一的接口,简化了互联网应用程序的开发过程。WinInet 广泛应用于各种 Windows 应用程序中,包括网页浏览器、下载管理器、网络游戏等。MFC WinInet 是一套强大的类库,为 MFC 程序员提供了在 Windows 平台上实现互联网通信和数据传输的工具。

JAZJD的博客 1636

nginx的location配置详解

语法规则: location [=|~|~*|^~] /uri/ { … }语法规则: location空格[=|~|~*|^~]空格/uri/ { … }= 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。~ 开头表示区分大小写的正则匹配~* 开头表示不区分大小写的正则匹配!~和!

thlzjfefe的博客 1万+

从专利库到Zemax:一个6mm定焦镜头从零到交付的完整设计流程(含CodeV转换技巧)

本文详细介绍了6mm定焦镜头从专利库检索到最终交付的全流程设计,重点解析了CodeV与Zemax工具链的无缝衔接技巧。通过实际案例展示规格定义、专利筛选、结构适配、非球面优化等关键步骤,帮助光学设计工程师提升设计效率和制造良率。特别包含CodeV转换Zemax的实用技巧,适用于机器视觉和安防镜头开发。

weixin_42561040的博客 160

【Transformer 相关理论深入理解】注意力机制、自注意力机制、多头注意力机制、位置编码

transformer原理

qq_38253797的博客 2万+

nginx 配置指令之location使用

nginx 配置指令之location使用

congge_study的博客 2万+

一阶电路基础知识

一阶电路(First-order circuit)是指由一个电感(L)或一个电容(C)和一个电阻(R)组成的电路。根据电感或电容的位置,一阶电路可以分为RC电路、RL电路、LC电路、RLC电路。一阶电路常用于滤波、放大、时序控制等各种电子设备和系统中。通过调整电阻、电容或电感的数值,可以改变电路的频率响应、滞后/提前相位等特性,实现不同的功能和性能一阶、二阶电路区别一阶电路由一个电容或一个电感与一个电阻组成,而二阶电路则由两个电容或两个电感与一个电阻组成。

weixin_45365488的博客 1万+

Nginx 中 location 块配置详解

原文链接 文章目录前言nginx文件结构配置 location 块location 语法location匹配命令解释location匹配顺序案例分析案例 1案例 2案例 3案例 4案例 5案例 6其他location配置相关匹配问号后的参数location URI结尾带不带 /命名 locationlocation 实际使用建议 前言 location 指令是 nginx 中最关键的指令之一,location 指令的功能是用来匹配不同的 URI 请求,进而对请求做不同的处理和响应,这其中较难理解的是多个 l

@日月空@的博客 1万+

Imagiq AI-PQ 图像质量增强模块详解:联发科 ISP 中的 AI 图像管线实战解析

随着智能手机影像系统对图像质量要求的持续提升,联发科在其 Imagiq ISP 中引入了 AI 驱动的图像增强模块——AI-PQ(AI-based Picture Quality),通过 AI 模型对亮度、色彩、噪声、锐度等多个维度进行动态调节与增强,实现更加智能化和个性化的图像输出效果。AI-PQ 在实际工程中已成为影响照片风格、视频观感和多模组一致性的核心能力之一。本文围绕 Imagiq 平台最新一代 AI-PQ 模块(2024-2025年量产平台为基础),结合实机开发与调优经验,深入剖析其各子模块的算

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1417

基于Simulink的电源纹波抑制仿真

电源纹波(Power Supply Ripple)是指直流电源输出中存在的交流分量。纹波的存在会导致电压波动,进而影响负载设备的性能和寿命。为了确保高质量的电源输出,通常需要设计有效的滤波电路来抑制纹波。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证电源纹波抑制方案。本教程将详细介绍如何使用 Simulink 进行电源纹波抑制的仿真实例。通过本教程,我们详细介绍了如何使用 Simulink 进行电源纹波抑制的仿真实例。背景介绍:理解电源纹波及其对电力电子系统的影响。仿真建模过程。

xiaoheshang_123的博客 512

Nginx Location配置详解

Nginx Location配置说明

Davis 9666

fast-lio运行步骤(使用velodyne数据)

使用fast-lio运行velodyne数据

ericdowney 4768

nginx location 常用配置示例

nginx location 常用配置示例 1、location 匹配规则 官方文档 location location = / { [ configuration A ] } location / { [ configuration B ] } location /documents/ { [ configuration C ] } location ^~ /images/ { [ configuration D ] } location ~* \.(gi

我是个农民的博客 3749

CNN+LSTM+Attention+DNN模型实战:pytorch搭建CNN+LSTM+Attention+DNN行车速度预测

CNN+LSTM+Attention+DNN模型实战:pytorch搭建CNN+LSTM+Attention+DNN行车速度预测

6045

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

彻底搞懂Nginx三大指令:location、rewrite、proxy_pass请求转发机制

彻底搞懂Nginx三大指令:location、rewrite、proxy_pass请求转发机制

https://ophome.blog.youkuaiyun.com,在IT行业有多年的工作经验,尤其是在Python、Linux、负载均衡、Nginx和服务器运维等领域。 2005

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

nginx下location的root和alias指令配置总结

Nginx配置中location、root和alias的关系一直很让人困惑,查询好多资料也没能搞明白,于是自己进行了实际操作、总结如下。 1、root指令: 说明:在location和root上,后面可以带/ 也可以不带/ ,效果一样。 # tree /data/root/ /data/root/ ├── file1.html └── r ├── file2.html └── t └── file3.html http://9.135.136.52/ :openresty默认首页;

赶路人儿 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

nginx中的location指令

1、location 介绍 location是Nginx中的块级指令(block directive),location指令的功能是用来匹配不同的url请求,进而对请求做不同的处理和响应,这其中较难理解的是多个location的匹配顺序,本文会作为重点来解释和说明。 开始之前先明确一些约定,我们输入的网址叫做请求URI,nginx用请求URI与location中配置的URI做匹配。 2、localtion 语法 location有两种匹配规则: 匹配URL类型,有四种参数可选,当然也可以不带参

小胡子 6509

nginx之location指令详解

前面介绍过nginx.conf的文件结构,大致介绍了顶层的指令和各级指令,今天给大家介绍下http模块里面的子模块server的指令location,该指令直接影响到请求路由转发规则,乃重中之重。 location匹配规则介绍 在server模块下,可以设置多个location模块以满足不同的需求,每个模块匹配不同的请求URI。最常用的匹配符号主要包括(=、~、~*、^~、@以及无符号匹配)。...

banche163的专栏 1369

nginx配置中,location的优先级以及if指令带来的坑

在 Nginx 配置中,location指令用于定义请求 URI 与特定资源或服务的映射关系。location^~location~*~*locationlocation^~locationlocation通过这样的优先级规则,Nginx 能够确定应该使用的location块,从而选择合适的配置指令来处理请求。特别注意:Nginxif指令在配置文件中的使用往往会产生一些误解,尤其是当开发者误解其工作方式和作用范围时可能会带来一些不期望的行为。这主要是由于 Nginxif指令的动作并不像许多编程语言中的。

houzi6844557的博客 2022

Nginx:location配置模块的用法

本文介绍Nginx配置文件中,location配置模块的用法。

jclee95的个人博客 2338

nginx location指令

指令作用 匹配指定的URI(uri指路径不包含参数和域名+端口【套接字】)   语法形式 官网:http://nginx.org/en/docs/http/ngx_http_core_module.html#location Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name...

JOJOY的博客 1368

nginx的location指令详解

nginx的location指令详解 Nginx 的 HTTP 配置主要包括三个区块,结构如下: http { # 这个是协议级别   include mime.types;   default_type application/octet-stream;   keepalive_timeout 65;   gzip on;     server {...

NIEEPN的博客 1036

Nginx 如何正确代理 SSE 与 WebSocket和彻底搞懂Nginx三大指令:location、rewrite、proxy_pass请求转发机制

根据客户端是否发送 Upgrade 头,动态设置 Connection 值# 若是 WebSocket 请求($http_upgrade = "websocket"),则 Connection 设为 "upgrade"# 否则设为 "close",避免普通 HTTP 请求被误判为长连接# 默认:升级连接(用于 WebSocket)'' close;# 空值:关闭连接(用于普通 HTTP)此 map 指令不能放在 server 或 location 中!

码农崛起 1544

Nginx location静态文件映射配置

指令都用于定义静态文件的路径映射,但它们的路径拼接逻辑完全不同。理解它们的区别是避免配置错误的关键。当需要将 URI 映射到一个与 URI 路径不匹配的目录时(例如将。下,且对应的docker中nginx容器真实路径为。在于路径拼接逻辑,务必通过实际文件路径验证配置。但根据你的描述,静态文件直接存放在容器的。以下这个Nginx的配置,愿意为访问。等静态文件,而不是嵌套在子目录中。静态文件映射的配置),此时不能通过。:路径拼接简单,适合标准目录结构。:路径替换灵活,适合自定义映射。

宋发元 3095

NGINX源码之:location

nginx location配置处理,ngx_http_init_locations、ngx_http_init_static_location_trees、ngx_http_join_exact_locations、ngx_http_create_locations_list、ngx_http_create_locations_tree

qq_22351805的博客 2772
上一篇: SpringBoot - 什么是跨域?如何解决跨域?
下一篇: NGINX学习笔记(四):一篇搞懂NGINX的常用配置之SERVER指令
cloneme01
博客等级 码龄20年 2万+粉丝 248原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloneme01

谢谢您的支持与鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值