【Nginx14】Nginx学习:HTTP核心模块(十一)其它配置
Nginx学习:HTTP核心模块(十一)其它配置
剩下的一些配置指令没有大的归属,不过也有一些是比较常见的,这部分内容学习完成之后,整个 http 模块相关的核心基础配置指令就全部学习完成了。今晚可以举杯庆祝一下了,咱们远程干杯。但是,还是要泼个冷水哦,咱们的学习还有很长的路要走。如果你看过 Nginx 的官方文档,就会知道仅仅是 HTTP 模块本身,就还有一大堆核心模块之外的模块。
不过,幸运的是,这些模块的内容单个来看都不复杂,因此,咱们还要继续加油哦。先不想那么多,赶紧进入今天的学习吧。
output_buffers
设置用于从磁盘读取响应的缓冲区的数量和大小。
output_buffers number size;
默认值是 2 32k,1.9.5 版本之后是 1 32k。如果可能,客户端数据的传输将被推迟,直到 Nginx 至少具有要发送的数据的字节数的集合大小。零值禁止推迟数据传输。可能是读取大文件时,关闭 sendfile ,调整这个配置的参数,从而提升服务器的吞吐率。一般很少用,保持默认好了。
postpone_output
如果可能,到客户端的数据将被推迟发送,直到nginx需要发送的数据至少有size字节。
postpone_output size;
默认值是 1460 , 设置为0将关闭推迟发送的功能。它是在 Nginx 层面所作的与 TCP_CORK 类似的一个优化。一般很少用,保持默认好了。
read_ahead
设置内核参数,控制文件预读的数量。
read_ahead size;
默认 0 ,在 Linux 系统上,因为使用的是 posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL) 系统调用,所以 size 无用。在FreeBSD上,访问的是 fcntl(O_READAHEAD,size) 系统调用。该系统调用在 FreeBSD 9.0-CURRENT 才被支持,在 FreeBSD 7 上则需要打补丁。FreeBSD 也从来都没用过,所以这个配置也就是了解一下就好了。
recursive_error_pages
允许或禁止 error_page 指令进行多次重定向。
recursive_error_pages on | off;
默认 off ,允许的话,重定向次数也有限制。而禁止此功能时,当访问 error_page 指令重定向的错误页面出现任何问题时,Nginx 将直接输出默认错误页面。
我们将 php 的 location 中的 500 错误指向的页面再次定义为 /err.php ,这个 php 文件中,抛出了一个异常,这样的话它还是会报 500 错误。也就是说,第一次访问 /err.php 之后,error_page 会持续不断地继续再次跳到 /err.php 。如果保持默认的配置,也就是 recursive_error_pages 为 off 那么直接就会出现默认的 Nginx 500 错误页面,并且错误日志中没有特别的日志信息。而如果开启了这个配置,那么错误日志中,会显示 rewrite or internal redirection cycle while internally redirecting to "/err.php" while sending to client
这样的错误信息。
request_pool_size
默认值 4k ,允许对每个请求的内存分配进行细调,主要是影响内存池的存储情况。
request_pool_size size;
这条指令对性能影响很小,通常情况下不应使用。
reset_timedout_connection
开启或关闭重置超时连接的功能。
reset_timedout_connection on | off;
默认值是 off ,重置连接是这样执行的:关闭套接字以前,设置 SO_LINGER 选项的超时值为 0 , 那么当关闭套接字时, Nginx 向客户端发送 TCP RST,并且释放此套接字占用的所有内存。这样可以避免某个已关闭的套接字长时间处于FIN_WAIT1状态,并占用内存缓冲区。应该注意的是,超时的长连接仍然是正常关闭。
说人话就是告诉 Nginx 关闭不响应的客户端连接,这将会释放那个客户端所占有的内存空间。这个配置应该是和 send_timeout 有关,个人猜测。不过不知道咋测试,有用过的小伙伴可以评论区留言一起学习哈。
resolver
resolver address ... [valid=time] [ipv4=on|off] [ipv6=on|off] [status_zone=zone];
配置将后端服务器的名字解析成 ip 地址的名字服务器。啥意思呀?其实就是指定一个 DNS 服务器地址,比如我们常用的 114.114.114.114 或者是 8.8.8.8 。这个配置其实用得比较少,它主要用于代理模块,使用域名的时候指定域名的 DNS 解析服务器。但通常来说,我们会直接 /etc/hosts ,或者直接使用 ip ,很少会使用这个配置。当然,还有两种情况可能会用到它:一是使用变量来配置反向代理或负载均衡时,二是正向代理。
# resolver 8.8.8.8;
location /resolver_test {set $zy www.zyblog.com.cn;proxy_pass http://$zy/;
}
自定义变量的内容我们还没有学,但是这里也可以看出,我们自定义了一个 $zy
变量,然后让 proxy_pass 指向这个 $zy
。变量里面是一个外网的域名,也是可以打开的,但是在 resolver 没有配置的情况下,你直接测试,会发现报 500 错误了。错误日志的内容是 no resolver defined to resolve www.zyblog.com.cn
。
现在打开上面测试代码中的注释,再次访问,就会发现可以正常访问了。正向代理的内容我们后面会学习到。
resolver 可以配置多个,以轮询的方式发送请求到多台 DNS 服务器。valid 参数指定缓存时间,status_zone 允许收集指定区域中请求和响应的 DNS 服务器统计信息,不过这个参数是商业版的 Nginx 才支持的。
resolver_timeout
为名字解析设置超时。
resolver_timeout time;
和 resolver 一起的,默认值是 30s 。
satisfy
Nginx 进行访问限制的有 ngx_http_access_module 模块和 ngx_http_auth_basic_module 模块。
satisfy all | any;
默认值是 all , 表示只有当两个模块的所有限制条件(写入配置的)都授权访问时,允许请求访问。设置成 any 时,表示如果当任意模块的任意限制条件授权访问时,允许请求访问。具体的内容我们将在后面学习访问及权限控制模块时再进行详细的测试。与后续的 access、 auth_basic、auth_request 有关。
send_timeout
设置向客户端传输响应的超时。
send_timeout time;
超时仅指两次相邻写操作之间的时间间隔,而非整个响应的传输时间。如果客户端在这段时间中没有收到任何数据,连接将关闭。
subrequest_output_buffer_size
设置用于存储子请求的响应体的缓冲区大小。
subrequest_output_buffer_size size;
默认值是 4k 或 8k ,默认情况下,缓冲区大小等于一个内存页。这是 4K 或 8K ,取决于平台。然而,它可以变得更小。该指令仅适用于响应体保存到内存中的子请求。例如,此类子请求由 SSI 创建。
tcp_nodelay
开启或关闭 Nginx 使用 TCP_NODELAY 选项的功能。
tcp_nodelay on | off;
默认 on , 这个选项仅在将连接转变为长连接的时候才被启用,在upstream发送响应到客户端时也会启用。
tcp_nopush
开启或者关闭 Nginx 在 FreeBSD 上使用 TCP_NOPUSH 套接字选项, 在 Linux 上使用 TCP_CORK 套接字选项。
tcp_nopush on | off;
默认值是 off , 选项仅在使用 sendfile 的时候才开启。开启此选项允许:
在 Linux 和 FreeBSD 4.* 上将响应头和正文的开始部分一起发送
一次性发送整个文件
TCP 相关的知识,小伙伴们可以自行查阅相关的资料。和 sendfile 配合使用,类似外卖小哥,不开启,拿一个送一单。开启的话,拿到全部的外卖,放到外卖箱,一起送。
variables_hash_bucket_size
设置变量哈希桶大小,其默认值取决于处理器的缓存线长度。
variables_hash_bucket_size size;
默认 64 ,啥是哈希表?为了快速处理静态的数据集合,诸如虚拟主机名、 map指令的值、 MIME类型和请求头的字段名,nginx使用了哈希表。后面我们学习相关的哈希表模块的时候再进行详细的学习。
variables_hash_max_size
设置变量哈希表的最大size(容量)。
variables_hash_max_size size;
默认值是 512 。同样在将来学习哈希表相关模块的时候再进行深入了解。
disable_symlinks
决定 Nginx 打开文件时如何处理符号链接。
disable_symlinks off;
啥是符号链接,其实就是我们常说的软链接,在 Linux 下使用 ln 命令,在 Windows 底下的快捷方式。这个配置可以决定 Nginx 打开文件时如何处理符号链接,包括以下几种方式:
off 默认行为,允许路径中出现符号链接,不做检查。
on 如果文件路径中任何组成部分中含有符号链接,拒绝访问该文件。
if_not_owner 如果文件路径中任何组成部分中含有符号链接,且符号链接和链接目标的所有者不同,拒绝访问该文件。
from=part 当 Nginx 进行符号链接检查时(参数 on 和参数 if_not_owner ),路径中所有部分默认都会被检查。而使用from=part 参数可以避免对路径开始部分进行符号链接检查,而只检查后面的部分路径。如果某路径不是以指定值开始,整个路径将被检查,就如同没有指定这个参数一样。如果某路径与指定值完全匹配,将不做检查。这个参数的值可以包含变量。
首先我们创建软连接的文件。
# /usr/local/nginx/html
mkdir llink
cd llink
ln -s /usr/local/nginx/html/aaa.html 1.html
正常情况下,访问 /llink/1.html 是没有问题的,那么我们先加一个 location ,并将 disable_symlinks 打开。
location /llink/ {disable_symlinks on;
}
现在访问 /llink/1.html ,将返回 403 错误,不管怎么样,只要是软连接,都会无法访问。所以现在,我们换成 if_not_owner ,直接访问还是 403 ,别着急,把目录和文件都改成 www 用户和用户组的,也就是和 Nginx 相同的用户。
chown www.www -R llink/
又可以访问了吧。最后我们再看看 from=part 参数的作用。将路径文件改回 root 用户,查看访问返回 403 了,接下来增加配置。
location /llink/ {disable_symlinks if_not_owner from=$document_root$uri;
}
这样配置其实就是路径与指定值完全匹配了,这样也不会做任何检查,同样可以打开页面了。
disable_symlinks 配置的参数 on 和 if_not_owner 会带来处理开销。只在那些不支持打开目录查找文件的系统中,使用这些参数需要工作进程有这些被检查目录的读权限。ngx_http_autoindex_module 模块,ngx_http_random_index_module 模块和 ngx_http_dav_module 模块目前会忽略这条指令。
disable_symlinks on from=$document_root; 这条指令只在有openat()和fstatat()接口的系统上可用。当然,现在的FreeBSD、Linux和Solaris都支持这些接口。
总结
一口气又学了这么多配置指令。这篇文章可能是到目前为止关于配置指令介绍的最多的一篇文章了。而且有很多指令我还不知道咋测试,这就要麻烦各位小伙伴,如果有了解的同学随时评论哦。如果身边有大佬可以请教的,也可以问问然后来教教我哈,欢迎大家随时找我交流。
HTTP 核心部分的配置项完成了,但是,还有一块非常大的内容,那就是 HTTP 核心模块中自带的那些变量。之前我们在学习的过程中就接触过一些,也了解过一点。下篇文章我们就着重地看一下在 Nginx 中提供的那些变量都有什么用。
参考文档:
http://nginx.org/en/docs/http/ngx_http_core_module.html
相关文章:
【Nginx14】Nginx学习:HTTP核心模块(十一)其它配置
Nginx学习:HTTP核心模块(十一)其它配置 剩下的一些配置指令没有大的归属,不过也有一些是比较常见的,这部分内容学习完成之后,整个 http 模块相关的核心基础配置指令就全部学习完成了。今晚可以举杯庆祝一下…...

243. 一个简单的整数问题2(树状数组)
输入样例: 10 5 1 2 3 4 5 6 7 8 9 10 Q 4 4 Q 1 10 Q 2 4 C 3 6 3 Q 2 4输出样例: 4 55 9 15 解析: 一般树状数组都是单点修改、区间查询或者单点查询、区间修改。这道题都是区间操作。 1. 区间修改用数组数组维护差分数组 2. 区间查询&am…...

C#利用自定义特性以及反射,来提大型项目的开发的效率
在大型项目的开发过程中,需要多人协同工作,来加速项目完成进度。 比如一个软件有100个form,分给100个人来写,每个人完成自己的Form.cs的编写之后,要在Mainform调用自己写的Form。 如果按照正常的Form form1 new For…...

【传统视觉】C#创建、封装、调用类库
任务 因为实现代码相对简单,然后又没有使用Opencv,所以就直接用C#实现,C#调用。 1.创建类库 1.1新建一个类库 vs2015 > 文件 > 新建 > 项目 using System; using System.Collections.Generic; using System.Linq;namespace Yo…...

AutoMapper反向映射
#region 用来验证反向映射public class MemberSource{public string Name { get; set; }public MemberInnerSource MemberInnerSource { get; set; }public MemberOtherInnerSource MemberOtherInnerSource { get; set; }}public class MemberInnerSource{public string Name {…...

华为Mate30报名鸿蒙 HarmonyOS 4.0.0.108 系统更新
华为 Mate 30 系列于 2019 年 11 月 1 日上市,包括 Mate 30 4G / 5G、Mate 30 Pro 4G / 5G、保时捷设计版 Mate30 共五款机型。华为 Mate 30 系列 5G 版搭载麒麟 990 5G 处理器,同时支持 SA 及 NSA 5G 双模,适配三大运营商的 5G / 4G / 3G / …...

elementui Cascader 级联选择使用心得
相信大家对于elementui并不陌生,作为适配Vue的优秀UI框架之一,一直被所有的开发者痛并快乐着。今天要记录的就是里边的主角之一Cascader。 首先先介绍一下Cascader ---> 当一个数据集合有清晰的层级结构时,可通过级联选择器逐级查看并选择…...

【ChatGPT 指令大全】怎么利用ChatGPT写报告
目录 选定切入角度 报告开头 大纲生成 草稿撰写 研究报告 提出反对观点 报告总结 研究来源 总结 随着人工智能技术的快速发展,自然语言处理技术在各个领域的应用越来越广泛。其中,ChatGPT作为目前最先进的自然语言处理模型之一,其强…...

【枚举,构造】CF1582 C D
Problem - C - Codeforces 题意: 思路: 思路很简单,只删除一种,直接枚举删除的是哪一种即可 但是回文子序列的判定我vp的时候写的很答辩,也不知道为什么当时要从中间往两边扫,纯纯自找麻烦 然后就越改越…...

POJ 3169 Layout BellmanFord Dijkstra
一、心路历程 这一个题目写了三天,可以说是非常挣扎了,明明是例题,但是就是倔强着不去看书上的题解,WA了7次,TLE了4次。 写了不知道多少条测试用例,一遍一遍的过,一点一点的调试。 最后终于找到…...

数据库管理员知识图谱
初入职场的程序猿,需要为自己做好职业规划,在职场的赛道上,需要保持学习,并不断点亮自己的技能树。 成为一名DBA需要掌握什么技能呢,先让Chat-GPT为我们回答一下: 数据库管理系统 (DBMS)知识ÿ…...

中兴服务器支持百度“文心一言”,助力AI产业发展
前段时间,中兴和百度正式对外宣布中兴服务器将会支持百度“文心一言”,为其提供更加强劲的算力支撑,从而加速“文心一言”的完事升级与更新迭代,助力AI产业化应用和生态的繁荣发展。 “文心一言”是百度基于文心大模型技术推出…...
STM 如何通过网络 time.windows.com获取时间
STM 如何通过网络 time.windows.com获取时间 在STM32中,你可以使用STM32Cube HAL库提供的网络套接字API来通过网络获取时间。以下是一个示例代码,演示如何通过time.windows.com获取时间: #include "stm32xxxx.h" #include "lwip/sockets.h" #include …...

数据结构——红黑树
文章目录 一.红黑树的定义二.红黑树的插入1.红黑树节点的定义2.红黑树的插入操作3.总结: 三.红黑树与AVL树的比较四.检验手写的红黑树五.源码 一.红黑树的定义 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色ÿ…...

【C++】数据结构与算法:常用排序算法
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍常用排序算法。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路…...
【C++】Bullet3代码存档
之前试了一下Bullet3物理引擎,但在linux上编译失败,于是放弃了。令我不满的还有另外一个原因,下载的发行包竟然有500M。C的Bullet3代码根本用不了,大部分教程实际都是用的老版本。而且此项目还整了python版本,各种蹭人…...

弘扬“两弹一星”精神,勇攀科学技术高峰——道本科技商业大学党日活动圆满落幕
2023年8月2日,道本科技与商业大学携手举办了一场主题为“弘扬‘两弹一星’精神,勇攀科学技术高峰”的党日活动。本次活动旨在了解党领导下的中国核工业发展历程,传承和弘扬“两弹一星”精神,同时展示道本科技创新产品,…...
Java中创建对象的几种方式
背景 面试的时候有些面试官喜欢问这些, 这里简单记录一下. 常见方式 方式1: new XXXX(); 使用new关键字:这是最常见的创建对象的方式,使用new关键字后面跟上类名和参数列表(如果有),可以调用类的构造方法来创建对象…...

Python(三)
诚信像一面镜子,一旦打破,你的人格就会出现裂痕。 存在短路的情景 谢谢观看 Python(三)...

android 如何分析应用的内存(十五)——Visual Studio Code 调试Android应用
android 如何分析应用的内存(十五)——Visual Studio Code 调试Android 应用 在上一篇文章介绍了jdb调试java应用 接下来介绍用UI界面调试java应用,达到同jdb一样的效果。 同样的UI界面有很多选择,如Eclipse,Android …...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果:邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目
应用场景: 1、常规某个机器被钓鱼后门攻击后,我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后,我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...

npm安装electron下载太慢,导致报错
npm安装electron下载太慢,导致报错 背景 想学习electron框架做个桌面应用,卡在了安装依赖(无语了)。。。一开始以为node版本或者npm版本太低问题,调整版本后还是报错。偶尔执行install命令后,可以开始下载…...

数据挖掘是什么?数据挖掘技术有哪些?
目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...
【大厂机试题解法笔记】矩阵匹配
题目 从一个 N * M(N ≤ M)的矩阵中选出 N 个数,任意两个数字不能在同一行或同一列,求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求:1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…...