当前位置: 首页 > news >正文

【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)知识&#xff…...

中兴服务器支持百度“文心一言”,助力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树的比较四.检验手写的红黑树五.源码 一.红黑树的定义 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色&#xff…...

【C++】数据结构与算法:常用排序算法

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍常用排序算法。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路&#x1…...

【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 …...

宁波银行最新内推码 MK4913

宁波银行最新内推码 MK4913 内推码: MK4913 内推二维码 : 网申路径: 网页端:登录宁波银行招聘官网: https://zhaopin.nbcb.com.cn 选择【校园招聘】-【招聘岗位】手机端:关注【宁波银行招聘】公众号&a…...

postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用

前言: MySQL数据库和postgresql数据库之间的差异并不多,这里的差异指的是对SQL语言的支持两者并不大,但底层的东西差异是非常多的,例如,MySQL的innodb引擎概念,数据库用户管理,这些和postgresq…...

【Python从小白到高手】---函数基础

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【Python小白从入门到精通】🎈 本专栏旨在分享学习Python的一点学习心得,欢迎大家在评论区讨论💌 目录…...

postman----传参格式(json格式、表单格式)

本文主要讲解postman使用post请求方法的2中传参方式:json格式、表单格式 首先了解下,postman进行接口测试,必须条件是: ♥请求地址 ♥请求协议 ♥请求方式 ♥请求头 ♥参数 json格式 先看一下接口文档,根据接口文档&…...

Uni-Dock:GPU 分子对接使用教程

github文件下载: git clone https://github.com/dptech-corp/Uni-Dock.git cd Uni-Dock/example/screening_test wget https://github.com/dptech-corp/Uni-Dock/releases/download/1.0.0/unidock 将此文件加入到全局变量中 chmod x unidock sudo mv unidock /…...

【Python】数据分析+数据挖掘——掌握Python和Pandas中的单元格替换操作

1. 前言 数据处理和清洗是数据分析和机器学习中至关重要的步骤。在数据处理过程中,我们经常需要对数据集进行清洗和转换,其中单元格替换是一个常用的技术。Python作为一种功能强大且灵活的编程语言,为数据处理提供了丰富的工具和库。Pandas库…...

Godot 4 源码分析 - 增加格式化字符串功能

Godot 4的主要字符串类型为String,已经设计得比较完善了,但有一个问题,格式化这块没怎么考虑。 String中有一个format函数,但这个函数只有两个参数,这咋用? String String::format(const Variant &va…...

C#中XML文档与Treeview控件操作的数据同步

在前文《C#使用XML和Treeview结合实现复杂数据采集功能》中,使用Treeview展示了XML的数据,问题是如果在Treeview上进行了操作,怎样同步更改XML数据的内容呢? 这个问题看似简单,实现起来有一点小麻烦。 要实现的操作功能…...

【Java Web基础】mvn命令、Maven的安装与配置

本文极大程度上来自Maven安装(超详解),但是担心安的过程中遇到什么不一样的问题,顺便加深印象,所以还是打算自己弄一篇。 目录 第一步:Download Maven第二步:解压与安装2.1 解压2.2 安装 第一步:Download …...

加强Web应用程序安全:防止SQL注入

数据库在Web应用程序中存储和组织数据时起着至关重要的作用,它是存储用户信息、内容和其他应用程序数据的中央存储库。而数据库实现了高效的数据检索、操作和管理,使Web应用程序能够向用户提供动态和个性化的内容。然而,数据库和网络应用程序…...