Nginx: 配置项之events段核心参数用法梳理

2024-08-22 14:36

本文主要是介绍Nginx: 配置项之events段核心参数用法梳理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

events 核心参数


看一下配置文件 events 段中常用的一些核心参数

经常使用的参数并不多,比较常配置的就这6个


1 ) use   含义是 nginx使用何种事件驱动模型

  • 这个事件驱动模型和linux操作系统底层的IO事件处理模型有关系
  • 语法:use method
  • method可选值:select、poll、kqueue、epoll、/dev/poll、eventport
    • 这个method不同于我们HTTP的method,在这里是指操作系统底层的一个IO处理模型
    • 一个事件驱动模型采用的一个参数, 比如说以前最早使用的web服务器
    • 像Apache,也就是我们的 httpd 它经常最初使用的是一个select的这样一个模型
    • 那包括后来有改进的其他型
    • 现在新的linux系统操作系统中,一般比较长用的都是 epoll 这样的一个事件驱动模型
    • 这个事件驱动模型是比较先进的,在高并发的系统中经常使用
  • 默认配置:无
  • 推荐配置:不指定,让nginx自己选择
    • 其实在这默认配置的情况下是没有的,不推荐对这个参数做配置
    • 因为在最早的Nginx版本中会需要使用 use 这样一个参数来指定
    • 因为linux可以用在多个平台上, 比如说, Solus 或 惠普unix这些小型服务器上
    • 通常情况下,它有时候早期会有这样一种事件驱动模型: /dev/poll
    • 这个eventport 也是在 Solus 操作系统上
    • 我们实际使用中,也不会去指定,Nginx 会默认选择最优的驱动模型

2 ) worker connections   含义是 worker子进程能够处理的最大并发连接数

  • 语法:worker connections number
  • 默认配置:worker connections 1024
    • 可以看到默认配置是 1024, 但是对在我们生产环境中,尤其对一个高并的系统,这个值是不足以承载的
    • 比如说,你现在有一个8核心的CPU,配置成 1024 的话,每一个 work connections 处理并发连接数是 1024
    • 配置8个worker子进程的话,它的处理能力最高可能也就是到一万左右
    • linux自身有一个最大的打开套接字的一个个数,也就是最大的一个打开文件个数是 65535 的一个上限
    • 是由我们操作系统本身所决定的,所以说,你这个work_connections 即使 20 w,也没有太大意义
    • 但是在很多的生产环境中,还是能是能够看到这样的配置,比如配置成 10 w
    • 最起码来说,你现在即使有一个worker子进程的话,也不会被操作系统所限
    • 虽然达不到 10 w,但是也能够充分去利用操作系统来尽可能提高并发连接的一个请求数
  • 推荐配置:worker_connections 65535/worker_processes | 65535
    • 比如在 main 段中, worker_processes 是 4,那就是 65535 / 4 取整
    • 直接配置成 65535 也问题不大,这是动态的配置,可在高性能的nginx服务器上配置更高的数值

3 ) accept_mutex   含义是 是否打开负载均衡互斥锁

  • 注意,3 和 下面的 4, 5 配合一起使用的
  • 语法:accept_mutex on | off
  • 可选值:on、off
  • 默认配置:accept_mutex off
  • 推荐配置:accept_mutext on
  • 下面看下具体什么是 accept_mutex
  • 在实际的这个环境中,Nginx 的进程结构是有 master 进程,folk 出了多个worker子进程
  • 真正处理请求的是我们的 worker 子进程,现在有一个客户端发送一个 HTTP 请求到 master 主进程
  • 这个时候,master 进程会去找对应的一个 worker process,把这个请求分给它
  • 这里就会涉及到一个问题,就是这个master进程是去找哪一个worker子进程呢?
  • 找到其中一个发送,还是每个都通知一下呢,因为配置了 mutex,也就是互斥开关为 on
  • 在默认关闭 off 的情况下,主进程会群发事件,通知到每一个子worker进程, 这就唤醒了每个子进程
  • 在一个高并发系统里,每一个 worker 进程都在处理很多请求
  • 现在又来了一个,肯定要处理,并且耗费性能
  • 当设置为 on 的时候,意味着每个worker子进程中加上了一个锁 (负载均衡锁)
  • 这个锁会轮流的将请求由 master process 分发给每一个worker

4 ) accept_mutex_delay   含义是 新连接分配给worker子进程的超时时间

  • 前置条件:上面 accept_mutex 配置成 on
  • 语法:accept_mutex_delay time
  • 默认配置:accept_mutex_delay 500ms
  • 推荐配置:accept_mutext_delay 200ms
  • 还是参考上面那个图,当一个新的HTTP请求到来以后, 告诉 master process
  • master process开始去找某一个work子进程来处理,根据负载均衡锁,我们找到了其中某一个
  • 它会轮询的来分配任务,比如第一次分给A worker,第二次分给B worker,…
  • 假如要分配给B worker, 但是它可能正在处理很多的其他并发连接,在繁忙状态,可能响应不过来
  • 在定义了 accept_mutex_delay ,比如值为 500ms, 在这个时间内没有响应,就会分配给其他worker
  • 避免了一直等待的问题,有时候可以为了提高性能,缩小上面的值,比如 200ms, 100ms

5 ) lock_file   含义是 负载均衡互斥锁文件存放路径 【main 段,辅助说明 events 段】

  • 语法: lock_file file
  • 默认配置: lock_file logs/nginx.lock
  • 推荐配置: lock_file logs/nginx.lock 同默认
  • lock_file,其实就是我们的负载进行锁,master process 会去看一下这个锁
  • 每一次需要分配新的请求给某一个worker子进程的时候
  • 会把相关的信息写在这样一个锁文件中
  • 注意,这个字段是在main段中配置的,不属于events
  • 在这里主要是配合 events 字段做相关说明

6 ) muti_accept   含义是 worker子进程可以接收的新连接个数

  • 语法:multi_accept on | off
  • 可选值:on、off
  • 默认配置:multi_accept off
  • 推荐配置:multi_accept on
  • worker 子进程在某一时刻,只能处理一个连接请求
  • 比如说一个新的用户请求到来以后,在某一时刻通常 worker 子进程只会接收一个新的
  • 就说你一次只给我一个新的连接,接收之后,对它进行处理
  • 打开这样一个参数之后,意味着每一个worker子进程一次性能够连接多个APP请求
  • 这个配置对性能的影响是很小的,虽然每一个worker子进程在某一时刻只能处理一个新的连接
  • 但是其实它已经是很高效的,所以,我们打开还是关闭对性能的影响并不大

示例配置


1 ) 主要配置

lock_file logs/nginx.log; # 这个在 main 段中events {worker connections 17500;accept_mutex on;accept_mutex_delay 100ms;multi accept on;# use epoll; # 这个一般不指定
}

2 ) 其他注意事项

  • $ touch logs/nginx.log
  • use epoll 这个一般不指定

3 )参考文档

  • ngx_core_module

这篇关于Nginx: 配置项之events段核心参数用法梳理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096545

相关文章

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1