Nginx配置文件解析

YOLO11涨点优化:注意力魔改 | 新颖的多尺度卷积注意力(MSCA),即插即用,助力小目标检测 多尺度卷积注意力(MSCA),有效地提取上下文信息,新颖度高,创新十足。 阅读详情

Nginx的主配置文件是nginx.conf,在我的机器里位于/usr/local/nginx/conf目录下。它决定了Nginx服务器加载哪些模块,如何监听和处理客户端请求,以及Nginx自身运行所必须的一些初始化项,比如多少个工作进程,调试级别等。

Nginx的配置文件是一个可继承的层次结构体系,定义在在上级定义块中的配置会自动应用到下级定义块,任何时候都可以在下级定义块中覆盖这些设置。因此,在多数场合,我们应该尽可能的将配置写在最定级的定义块中。

一共有三层定义块,即HTTP块,server块和Location块。除此之外,还存在两个特殊的Location块,一个事件块(event block)和根(root)区块,根区块是事件块和HTTP块贮留的地方。这些块只包含很少的一些配置,因此绝大多数时间会花在HTTP块,server块和Location块的配置上。

这些块具有某种意义上的语义。Server块即Apache的虚拟主机(Virtual Host),而Location块常常指的是一个URI。

基于前面所述,我们给出Nginx配置文件的体系结构如下:

虚拟主机块(virtual hosts)

Nginx从设计上考虑了一台服务器有多个网络接口和多个虚拟服务器并存的情况。从配置上,它使用下面的方式来决定来自于不同网络接口的各个URL请求如何被匹配和处理。

一、Server块

server {
    listen       192.168.1.1:80;
    server_name  nginx.org  www.nginx.org;
    ...
}

server {
    listen       192.168.1.1:80;
    server_name  nginx.net  www.nginx.net;
    ...
}

server {
    listen       192.168.1.2:80;
    server_name  nginx.com  www.nginx.com;
    ...
}

上述server块定义了三个虚拟主机,其中前两个监听在192.168.1.1:80端口上,它们分别响应不同的主机地址;最后一个则临听在另一个网络接口192.168.1.2:80上。

当Nginx收到一个HTTP请求时,它会首先从HTTP头的HOST字段中取得主机名,结合监听地址进行server匹配。如果HTTP不包含HOST字段,或者HOST字段无法匹配,则会匹配对应监听地址上的缺省配置的虚拟服务器。在上面的例子中,每个网络接口上配置的第一个server,即为缺省服务器。即,如果在192.168.1.1:80上收到一个没有HOST字段的请求,则Nginx会使用www.niginx.org这个server块的配置来处理这个请求。注意,关于缺省服务器的指定,还可以通过在监听端口上附加default_server值来指定该虚拟服务器为缺省服务器。即可以用下面的配置来指定www.nginx.net为缺省服务器:

server {
    listen       192.168.1.1:80;
    server_name  nginx.org  www.nginx.org;
    ...
}

server {
    listen       192.168.1.1:80 default_server;
    server_name  nginx.net  www.nginx.net;
    ...
}
二、Location块

Location块的设置决定了每个具体的URL如何被处理。关于它的配置,可以参见Location.

语法: location [=/~/~*/^~/@] /uri […]

结合下面的例子来分析:

location ~* \.(gif|jpg|jpeg)$ {
  # matches any request ending in gif, jpg, or jpeg. However, all
  # requests to the /images/ directory will be handled by
  # Configuration C.
  [ configuration D ]
}

location语法中包含四个部分:location关键字,前缀,URI和配置项,其中前缀和URI决定如何匹配到一个URI,我们先来看这一部分。

location的前缀共包含5个关键字:’=',’~',’~*’,’^~’和‘@’,用来指示后面的URI部分是字面匹配,正则表达式匹配还是命名位置匹配(named location)。命名位置匹配并不用于标准的地址匹配,它们是用来做内部请求重定向的,具体请参见error_page,try_files。当然,location也可以不包含任何前缀。

前缀’='指示Nginx对后面的URI完全按字面精确匹配。比如:

location  = / {
  # 只匹配对根地址'/'的请求.
  [ 配置 A]
}

上例中, http://www.nginx.com/的请求会被匹配,而 http://www.nginx.com/anydocument.html不会被匹配。注意,如果你在匹配中指定了index页面,则该页面,比方说为index.html,则无论你输入 http://www.nginx.com/或者 http://www.nginx.com/index.html都会被匹配。

前缀’~',’~*’用来指示该location是一个正则表达式的匹配,’~'要求在匹配时区分大小写,而’~*’表明在匹配时不区分大小写。Nginx的正则表达式是PCRE兼容的,应用中需要注意URI中常见的字符’.'需要进行转义。

前缀’^~’另有含义,它表示中止location的继续匹配。通常在复杂的网站配置中,可能会出现一个URI请求会同时匹配到多个location的情况。那么在这种情况下,该URI究竟适用哪个location定义呢?这就涉及到location的优先级以及何时提前中止匹配的问题。

Nginx规定:

1. 任何时候,带’='前缀的匹配优先级最高。如果某个URI能完全匹配,则URI匹配搜索中止。

2. 尝试匹配非正则表达式URI,如果找到一个区配,且该location带前缀’^~’指示,URI匹配搜索中止;否则,保留匹配结果,继续搜索。

3. 尝试正则表达式匹配。如果存在多个正则表达式都可以匹配到请求的URI,则按它们在配置文件中的先后顺序来决定优先级。

4. 如果#3存在匹配,使用该匹配结果,否则使用#2的结果。

最后,还存在着不带前缀的字面匹配,请看以下两组定义:

location  = / {
  # matches the query / only.
  [ configuration A ]
}
location  / {
  # matches any query, since all queries begin with /, but regular
  # expressions and any longer conventional blocks will be
  # matched first.
  [ configuration B ]
}

上述定义中的第一组匹配前面已经讲过了。前面不能被第一组定义匹配的URI http://www.nginx.com/anydocument.html 这次可以被第二组定义匹配了。第二组定义的含义是,从URI的起始部分开始做不定长度的匹配,因此,实际上任何其它location定义不能匹配的URI都会被这组location定义匹配。

不带前缀的字面匹配优先组最低,适合用作缺省定义。

此外,Nginx在做URI比较时,使用的是已解码的字符串,例如,如果你想匹配"/images/%20/test",则你必须定义"/images/ /test"。

最后,是一些例子,供练习。

Example:

location  = / {
  # matches the query / only.
  [ configuration A ]
}
location  / {
  # matches any query, since all queries begin with /, but regular
  # expressions and any longer conventional blocks will be
  # matched first.
  [ configuration B ]
}
location ^~ /images/ {
  # matches any query beginning with /images/ and halts searching,
  # so regular expressions will not be checked.
  [ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
  # matches any request ending in gif, jpg, or jpeg. However, all
  # requests to the /images/ directory will be handled by
  # Configuration C.
  [ configuration D ]
}

Example requests:

    / -> configuration A
    /documents/document.html -> configuration B
    /readme.html –> configuration B, if readme.html is not the index page
    /images/1.gif -> configuration C, prefix ^~ cause the search ceased. Otherwise, it should match configuration D
    /documents/1.jpg -> configuration D 
实测可复现|2026 Cloudflare盾v4.0反反爬全实战:从JS/WASM逆向到JA3指纹伪装,手把手突破拦截(附完整逆向代码+避坑手册) 本文以2026年Cloudflare盾v4.0(集成Shield Synapse v2.0)为核心,全程以实战复盘为视角,拆解了从JS/WASM混合逆向、全维度指纹伪装(JA3+浏览器指纹)、人类行为模拟,到代理池搭建的全流程,整合了完整可复现的代码,所有步骤和踩坑点均为实测所得,无任何AI套话,新手也能跟着复现,最终实现爬取成功率从12%提升至95%+。 阅读详情

相关推荐

NDVI空间分布变化Slope趋势分析与F检验(自用)

1.NDVI数据预处理2.一元线性回归分析3.Slope趋势分析与F检验

什么都学亿点点的博客 9017

Nginx配置api接口端口映射解决跨域问题

配置 location /api { proxy_set_header Host $host:8000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://ip:port/api; cli

宇晨的博客 1443

2024年五大革新图像分割模型解析:架构创新与实战应用指南

本文深入解析2024年五大革新图像分割模型,包括SAM2、Mask2Former、DINOv2和Swin Transformer等,探讨其架构创新与实战应用。从多尺度处理、提示交互到自监督学习,这些模型在精度提升、效率优化和交互增强方面取得突破,广泛应用于医疗影像、工业质检和智慧城市等领域。

hadoop5ranger的博客 894

Nginx 配置文件

如果代理目标:ip+端口+项目名称,则至二级把/nginx/api 替换成/api,并将/saved_objects/_find?如果代理目标:ip+端口,则直接把api/saved_objects/_find?每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。server配置 /etc/nginx/conf.d/default.conf。alias:自定义路径名称。

dahaidoushishuia的博客 809

基于Jetson Nano与YOLOv5s的无人机道路抛洒物实时检测系统【附数据集+代码】

本文详细介绍基于Jetson Nano与YOLOv5s的无人机道路抛洒物实时检测系统,通过硬件选型、数据采集、模型优化等关键步骤,实现高效的道路安全监控。系统结合无人机高空视角和YOLOv5s算法,能精准识别各类抛洒物,实测准确率达98.2%,为交通管理提供智能化解决方案。

weixin_29081163的博客 1456

CentOS7 安装天气分型软件cost733过程详解

cost733是一款天气分型软件,其内置的一些算法可以帮助气象工作者进行天气类型划分等(我也是初学者,仅仅知道一些皮毛),但是网上找到的安装办法比较少,并且总会出现一些报错,试了一晚上,终于将安装办法调通了,希望可以帮助到大家

weixin_62573024的博客 3562

Nginx安装及配置文件nginx.conf详解

1、安装Nginx 在安装Nginx之前,需确保系统已经安装了gcc、 openssl-devel、 pcre-devel和zlib-devel软件库。 下面是Nginx安装过程: wget http://nginx.org/download/nginx-1.0.14.tar.gz tar zxvf nginx-1.0.14.tar.gz ./configure --with-htt

wzb56的资料库 1万+

Synopsys的CoreConsultant使用简析

CoreConsultant使用简析

weixin_58165606的博客 1万+

Nginx 配置实现web解析php代码 过程记录

【Nginx配置】Nginx本身不支持对php的解析,需要将php代码转发到php-fpm 进程管理器来交给php解析器解析代码。重要的配置注意注释位置:user www www; # 用户 用户组 worker_processes 1; error_log logs/error.log; #error_log logs/error.log notice; ...

孙雪峰 6393

fMRI原始数据分割的笔记

好记性不如烂笔头_fMRI小白入门笔记

ZY_brain的博客 2896

Android14 Qcom 从Framework到Driver带你打开WIFI(二)

上篇文章讲到了UI打开WIFI以后,逐步调用到加载底层驱动以及通知等相关流程。这篇接着上文继续往下看WIFI ON的后续动作。

IAYLBL的博客 766

《深入剖析NGINX》学习记录

1.HTTP服务基本特性   处理静态页面请求;   处理index首页请求   对请求目录进行列表显示;   支持多进程间的负载均衡;   对打开文件描述符进行缓存(提高性能);   对反向代理进行缓存(加速);   支持gzip、ranges、chunked、XSLT、SSI以及图像缩放;   支持SSL、TLS SNI 2.HTTP服务高级特性     基于名称的虚拟主机;...

zhangge3663的博客 1446

基于Simulink的鲸鱼优化算法(WOA)MPPT仿真

摘要:本文介绍了基于Simulink的鲸鱼优化算法(WOA)在光伏MPPT控制中的应用。WOA模拟座头鲸的"气泡网捕食策略",通过包围猎物、螺旋收缩和随机搜索三阶段动态平衡全局探索与局部开发能力,有效解决局部阴影导致的多峰P-V曲线问题。文章详细讲解了WOA-MPPT的Simulink建模过程,包括多峰光伏阵列建模、WOA控制器实现和Boost变换器控制。仿真结果显示,在三种典型工况下,WOA-MPPT的追踪效率>99.3%,动态响应时间<0.15s,性能优于传统算法。最后提出了混合WO

amy_mhd的博客 72

java解析nginx配置文件

最近项目中需要解析nginx配置文件,几经查找在github上找到nginx-java-parser工具,项目地址:https://github.com/odiszapc/nginx-java-parser 解析nginx.conf过程可以参考该项目的README.md,不知道调用哪些方法来完成功能,可以查看相应的源码即可找到。下面给出我的解析demo。 2 3 import co...

weixin_30443813的博客 1725

visio安装包

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

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Nginx的配置文件解析

已经看了一段时间的nginx的源代码了,但其实启动的过程一直感觉弄得不是很清楚,因为自己一直在回避配置文件的解析过程,以及具体是如何根据配置文件中的命令来回调相应模块所定义的回调函数。如果这个不弄清楚的话,其实很多地方都容易一知半解。好吧,这次决定把这部分弄清楚。 首先我们先看看模块的命令的定义://模块的命令定义 struct ngx_command_s { ngx_str_t

fjs的专栏 1592

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

nginx 配置文件解析

<br />      ngx_conf_parse 这个函数来完成对配置文件的解析,其实这个函数不仅仅解析文件,还可以用来解析参数和块的,不过我们在这里分析解析文件。 <br /> <br />     文件简单的分为三个部分<br />     一 配置文件预先处理<br />     二 读取<br />     三 处理 <br /> <br /> <br />     一  配置文件预处理<br />     主要打开文件,创建缓冲区,并把文件信息以及读取的缓冲区信息填到cf->conf_file

benbendy1984的专栏 2203

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

python解析nginx配置文件_Nginx 配置文件解析器 python-nginx

软件介绍python-nginx , Nginx 配置文件解析器。用法示例:#!/usr/bin/envpython#encoding:utf-8fromparserimportParserfromconfigimportConfig#just4testif"__main__"==__name__:#配置文件路径path=r'./default'#结构化后的配...

weixin_39713538的博客 592

Nginx 配置文件解析

nginx 配置文件解析

wangqiang996的博客 876

nginx配置文件解析

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> ...

爱宝贝丶的博客 457

nginx源码分析--配置文件解析

ngx-conf-parsing 对 Nginx 配置文件的一些认识: 配置指令具有作用域,分为全局作用域和使用 {} 创建其它作用域。同一作用域的不同的配置指令没有先后顺序;同一作用域是否能使用相同的指令,和对相 同指令的处理由各模块自行决定整个 Nginx 的运行时各模块行为都和配置指令密切相关每个配置指令都只能在预先定义好的作用域中使用配置指令解析使用递归的方式 配置解析相关代码量

鱼思故渊的专栏 1634

NGINX的配置文件解析

nginx配置信息的解析流程 2011年9月9日 admin 发表评论 阅读评论 1,744 次浏览 请关注最新修正合订:http://lenky.info/ebook/ 这一系列的文章还是在09年写的,存在电脑里很久了,现在贴出来。顺序也不记得了,看到那个就发那个吧,最近都会发上来。欢迎转载,但请保留链接:http://lenky.info/,谢谢。 nginx的配置文件格式是n

dasgk的专栏 1127

python解析nginx配置文件_python-nginx

python-nginx,Nginx 配置文件解析器。用法示例:#!/usr/bin/envpython#encoding:utf-8fromparserimportParserfromconfigimportConfig#just4testif"__main__"==__name__:#配置文件路径path=r'./default'#结构化后的配置内容dat...

weixin_42355411的博客 1662

golang如何解析nginx的配置文件_Nginx模块开发:从源码剖析整个Nginx框架

视频解析:浅析nginx模块用在哪里?手把手带你实现nginx模块开发16万行nginx源码,就该这么读ngx_module_t结构体模块又分为ngx_core_module_t和ngx_xxx_module_t,而在ngx_module_t中会包含这两个结构,只不过不同类的模块包含不同的结构,一般会 用ctx表示,ngx_module_t又用type这个域用来表示在模块的类型struct ngx...

weixin_33601504的博客 879

nginx配置文件解析工具

最近花了一些时间自己实现解析nginx配置文件的功能,这里有个工具先记下以后用。 https://github.com/nginxinc/crossplane 转载于:https://www.cnblogs.com/SEC-fsq/p/8137005.html...

weixin_30872499的博客 484
上一篇: 深度体验Javascript 模块设计模式
下一篇: 微软的Javascript代码规范
yaaron
博客等级 码龄19年 7粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值