【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

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

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

相关文章

Appium+Python3环境搭建,其实超简单!

appium可以说是做app最火的一个自动化框架,它的主要优势是支持android和ios,另外脚本语言也是支持java和Python。略懂Python,所以接下来的教程是appiumpython,自己搭建环境的时候,按照某些博客安装遇到各种奇葩问题&am…

UE4 Cesium for unreal 离线加载应用全流程

参考配置:Win10、请保证是在局域网环境下配置 配置IP 右键选择:打开“网络和Internet” 设置 选择更改适配器选项 请保证以太网是处于启用状态并连接线缆,点击右键选择属性 双击选择Internet协议版本4(TCP/IPv4) 将IP地…

微信小程序真机调试报ERR_CERT_AUTHORITY_INVALID

微信小程序真机调试报ERR_CERT_AUTHORITY_INVALID 问题解决方法 问题 微信开发者工具中调试微信小程序,在开发工具里面调试没问题,但是真机调试的时候报ERR_CERT_AUTHORITY_INVALID错误 解决方法 到这个站点检查域名的Https证书的安全性 : 传送门(注:…

【雕爷学编程】MicroPython动手做(31)——物联网之Easy IoT

1、物联网的诞生 美国计算机巨头微软(Microsoft)创办人、世界首富比尔盖茨,在1995年出版的《未来之路》一书中,提及“物物互联”。1998年麻省理工学院提出,当时被称作EPC系统的物联网构想。2005年11月,国际电信联盟发布《ITU互联网…

LeetCode1137. 第 N 个泰波那契数

题干 泰波那契序列 Tn 定义如下: T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n,请返回第 n 个泰波那契数 Tn 的值。 示例1: 输入:n 4 输出:4 解释: T_3 0 1 1 2 T_…

常用消息中间件对比

Kafka 1.基于Pull的模式来处理消息消费 2.追求高吞吐量 3.一开始的目的就是日志收集和传输 4.0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求、适合产生大量数据的互联网服务的数据收集业务. RabbitMQ RabbitMQ是使用Erlang语…

Grafana集成prometheus(1.Prometheus安装)

下载docker镜像 docker pull prom/prometheus docker pull prom/node-exporter启动 node-exporter 该程序用以采集机器内存等数据 启动脚本 docker run -d -p 9100:9100 prom/node-exporter ss -anptl | grep 9100启动截图 prometheus 启动脚本 # 3b907f5313b7 为镜像i…

面试热题(x的平方根)

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 这道题虽然是简单题…

【导出Word】如何使用Java+Freemarker模板引擎,根据XML模板文件生成Word文档(只含文本内容的模板)

这篇文章,主要介绍如何使用JavaFreemarker模板引擎,根据XML模板文件生成Word文档。 目录 一、导出Word文档 1.1、基础知识 1.2、制作模板文件 1.3、代码实现 (1)引入依赖 (2)创建Freemarker工具类 &…

回调函数实现

案例1&#xff1a; 将集合里面的对象根据不同的时间粒度转为对应的月末&#xff0c;季末&#xff0c;年末 集合里面的对象未知&#xff0c;且字段名称未知&#xff0c; 调用方法&#xff1a; public static void main(String[] args) {List<InvoicingNewRi> list new …

.net 6 efcore一个model映射到多张表(非使用IEntityTypeConfiguration)

现在有两张表&#xff0c;结构一模一样&#xff0c;我又不想创建两个一模一样的model&#xff0c;就想一个model映射到两张表 废话不多说直接上代码 安装依赖包 创建model namespace oneModelMultiTable.Model {public class Test{public int id { get; set; }public string…

“深入解析JVM内部机制:从字节码到垃圾回收“

标题&#xff1a;深入解析JVM内部机制&#xff1a;从字节码到垃圾回收 摘要&#xff1a;本文将从字节码生成、类加载、运行时数据区域和垃圾回收等方面深入解析JVM的内部机制&#xff0c;并通过示例代码展示其工作原理和实践应用。 正文&#xff1a; 一、字节码生成 JVM是基…

面试热题(前中序遍历构建树)

给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 题目中是给定两个数组&#xff0c;一个是存放这颗树的前序遍历的数组&#xff0c;一个是存放这棵树的…

如何把pdf转成cad版本?这种转换方法非常简单

将PDF转换成CAD格式的优势在于&#xff0c;CAD格式通常是用于工程设计和绘图的标准格式。这种格式的文件可以在计算机上进行编辑和修改&#xff0c;而不需要纸质副本。此外&#xff0c;CAD文件通常可以与其他CAD软件进行交互&#xff0c;从而使得工程设计和绘图过程更加高效和精…

Xilinx A7开发板LVDS IO无输出问题解决方法

使用A7-35T FGG484的FPGA开发板bank16上的IO作为差分LVDS的输入输出&#xff0c;搭建输入输出测试工程发现LVDS可以输入、无法输出。查阅UG471&#xff0c;找到如下信息&#xff1a; 手册中已经针对A7的LVDS做了明确的应用说明&#xff1a; &#xff08;1&#xff09;HP bank上…

Mr. Cappuccino的第57杯咖啡——简单手写Mybatis大致原理

简单手写Mybatis大致原理 大致原理项目结构项目代码代码测试 大致原理 底层基于JDK动态代理技术实现 项目结构 项目代码 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns…

笙默考试管理系统-MyExamTest--backBtn

笙默考试管理系统-MyExamTest--backBtn 目录 一、 笙默考试管理系统-MyExamTest--backBtn 二、 笙默考试管理系统-MyExamTest--backBtn 三、 笙默考试管理系统-MyExamTest--backBtn 四、 笙默考试管理系统-MyExamTest--backBtn 五、 笙默考试管理系统-MyExamTest--ba…

SpringBoot统一功能处理(AOP思想实现)(统一用户登录权限验证 / 异常处理 / 数据格式返回)

主要是三个处理&#xff1a; 1、统一用户登录权限验证&#xff1b; 2、统一异常处理&#xff1b; 3、统一数据格式返回。 目录 一、用户登录权限校验 &#x1f345; 1、使用拦截器 &#x1f388; 1.1自定义拦截器 &#x1f388; 1.2 设置自定义拦截器 &#x1f388;创建cont…

一零六七、JVM梳理

JVM&#xff1f; Java虚拟机&#xff0c;可以理解为Java程序的运行环境&#xff0c;可以执行Java字节码&#xff08;Java bytecode&#xff09;并提供了内存管理、垃圾回收、线程管理等功能 java内存区域划分?每块内存中都对应什么? 方法区&#xff1a;类的结构信息、常量池、…

Typescript+vite+sass手把手实现五子棋游戏(放置类)

Typescriptvitesass手把手实现五子棋游戏&#xff08;放置类&#xff09; 下面有图片和gif可能没加载出来 上面有图片和gif可能没加载出来 导言 最近练习Typescript&#xff0c;觉得差不多了&#xff0c;就用这个项目练练手&#xff0c;使用Typescript纯面向对象编程。 开源…