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

深入解析Nginx核心模块

在本篇博客文章中,我们将深入探讨Nginx的核心模块。了解这些核心模块的功能和使用方法,可以帮助我们更好地配置和优化Nginx服务器,以满足各种不同的网络服务需求。

Nginx核心模块概览
Nginx是一款高性能的HTTP和反向代理服务器,其灵活性和高效性很大程度上得益于丰富的模块系统。Nginx的模块可以分为三类:核心模块、处理程序模块和过滤器模块。本文将重点介绍一些关键的核心模块。

Nginx核心模块

nginx官网帮助文档
http://nginx.org/en/docs/
tengine 帮助文档
https://tengine.taobao.org/documentation_cn.html
Nginx的配置文件的组成部分
主配置文件:nginx.conf
子配置文件: include conf.d/*.conf
fastcgi,uwsgi,scgi 等协议相关的配置文件
mime.types:支持的mime类型,MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型,MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据,是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式
MIME参考文档
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Guides/MIME_types
nginx 配置文件格式说明

配置文件由指令与指令块构成
每条指令以;分号结尾,指令与值之间以空格符号分隔
可以将多条指令放在同一行,用分号分隔即可,但可读性差,不推荐
指令块以{ }大括号将多条指令组织在一起,且可以嵌套指令块
include语句允许组合多个配置文件以提升可维护性
使用#符号添加注释,提高可读性
使用$符号使用变量
部分指令的参数支持正则表达式

Nginx 主配置文件的配置指令方式

directive value [value2 ...];注意
(1) 指令必须以分号结尾
(2) 支持使用配置变量内建变量:由Nginx模块引入,可直接引用自定义变量:由用户使用set命令定义,格式: set variable_name value;引用变量:$variable_name

主配置文件结构:四部分

main block:主配置段,即全局配置段,对http,mail都有效#事件驱动相关的配置
event {...}#http/https 协议相关配置段
http {...} #默认配置文件不包括下面两个块
#mail 协议相关配置段
mail {...}#stream 服务器相关配置段
stream {...
}

默认的nginx.conf 配置文件格式说明

#全局配置端,对全局生效,主要设置nginx的启动用户/组,启动的工作进程数量,工作模式,Nginx的PID路径,日志路径等。
user  nginx nginx;
worker_processes  1;   #启动工作进程数数量
events { #events设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连接,使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的网络连接进行序列化等。worker_connections  1024;  #设置单个nginx工作进程可以接受的最大并发,作为web服务器的时候最大并发数为worker_connections * worker_processes,作为反向代理的时候为(worker_connections * worker_processes)/2}
http { #http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这设置,http块可以包含多个server块,而一个server块中又可以包含多个location块,server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链接的请求上限等。include       mime.types;default_type  application/octet-stream;sendfile        on; #作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用sendfile系统调用来传输文件,sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝,硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。
keepalive_timeout  65;  #长连接超时时间,单位是秒
server { #设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个location模块。比如本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用80端口提供web服务listen  80;  #配置server监听的端口server_name  localhost; #本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。location / { #location其实是server的一个指令,为nginx服务器提供比较多而且灵活的指令,都是在location中体现的,主要是基于nginx接受到的请求字符串,对用户请求的UIL进行匹配,并对特定的指令进行处理,包括地址重定向、数据缓存和应答控制等功能都是在这部分实现,另外很多第三方模块的配置也是在location模块中配置。root   html; #相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对路径配置。index  index.html index.htm; #默认的页面文件名称}error_page   500 502 503 504  /50x.html; #错误页面的文件名称location = /50x.html { #location处理对应的不同错误码的页面定义到/50x.html,这个跟对应其server中定义的目录下。root   html;  #定义默认页面所在的目录
}
}
#和邮件相关的配置
#mail {
#                ...
#        }          mail 协议相关配置段
#tcp代理配置,1.9版本以上支持
#stream {
#                ...
#        }       stream 服务器相关配置段#导入其他路径的配置文件
#include /apps/nginx/conf.d/*.conf
}

全局配置

Main 全局配置段常见的配置指令分类
正常运行必备的配置
优化性能相关的配置
用于调试及定位问题相关的配置
事件驱动相关的配置

user  nginx nginx; #启动Nginx工作进程的用户和组
worker_processes  [number | auto]; #启动Nginx工作进程的数量,一般设为和CPU核心数相同
worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ; #将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。
CPU MASK: 00000001:0号CPU00000010:1号CPU10000000:7号CPU
#示例:
worker_cpu_affinity 0001 0010 0100 1000;第0号---第3号CPU
worker_cpu_affinity 0101 1010;#示例
worker_processes  4;
worker_cpu_affinity 00000010 00001000 00100000 10000000;
[root@ubuntu2404 ~]#ps axo pid,cmd,psr | grep nginx
45768 nginx: master process /apps   0
45769 nginx: worker process         0
45770 nginx: worker process         1
45870 grep --color=auto nginx       0#auto 绑定CPU
#The special value auto (1.9.10) allows binding worker processes automatically to available CPUs:
worker_processes auto; 
worker_cpu_affinity auto;
#The optional mask parameter can be used to limit the CPUs available for automatic binding:
worker_cpu_affinity auto 01010101;#错误日志记录配置,语法:error_log file  [debug | info | notice | warn | error | crit | alert | emerg]
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
err
http://www.xdnf.cn/news/1394803.html

相关文章:

  • DAY 17 常见聚类算法-2025.8.29
  • 将数据赋值到多个文档里,并将多个word放入压缩包并下载
  • 非标设计 机架模板 misumi 设计组合案例
  • 小康AI家庭医生,亮相2025WteamAI创客节!
  • 【51单片机】【protues仿真】 基于51单片机智能视力保护台灯系统
  • 13 SQL进阶-InnoDB引擎(8.23)
  • Elasticsearch 9.X 使用推理 API 进行语义搜索
  • 2025年06月 Scratch 图形化(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 《跳出“技术堆砌”陷阱,构建可演进的软件系统》
  • opencv基础学习与实战之轮廓分析与模板匹配(4)
  • Wi-Fi 时延与掉包的关键因素全解析
  • 整理python接口自动化相关——10、自动考虑点(待续)
  • 【51单片机定时1秒中断控制流水灯方向】2022-11-14
  • 实现动态数组
  • 听听广播 安卓网络收音机v2.1.6 支持定时闹钟回听各地电台
  • MySQL高频问题:事务及慢SQL优化全解析
  • 今天聊聊支付里的三个小概念:同名充值、非同代付和 D0。
  • 第0记 cutlass 介绍及入门编程使用
  • Go初级之五:结构体与方法
  • 【leetcode】114. 二叉树展开为链表
  • 【Rust】 6. 字符串学习笔记
  • app怎么防止被攻击被打有多少种防护方式?
  • 税务岗位能力提升培训课程推荐
  • 达梦数据库-数据缓冲区 (二)
  • 【Flask】测试平台开发,产品管理实现编辑功能-第六篇
  • 接吻数问题:从球体堆叠到高维空间的数学奥秘
  • 机器学习 - Kaggle项目实践(5)Quora Question Pairs 文本相似
  • 栈和队列OJ习题
  • 佳易王钓场计时计费系统:全方位赋能钓场智能化管理,软件操作教程
  • vue在函数内部调用onMounted