当前位置: 首页 > 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.dtcms.com/a/356510.html

相关文章:

  • npm使用的环境变量及其用法
  • 专业的储存数据的结构:数据库
  • 【开题答辩全过程】以 基于Python的美食点评系统为例,包含答辩的问题和答案
  • iOS混淆工具实战 电商类 App 的数据与交易安全防护
  • Lambda 表达式在 PyQt/PySide 中的应用
  • Python OpenCV图像处理与深度学习:Python OpenCV入门-图像处理基础
  • 什么是 MySQL的主从同步机制?它是如何实现的?
  • 交互设计 | 无人机控制系统的 UI 设计:从人机交互到任务管理
  • Word - Word 查找文本中的特定内容
  • 宜春城区光纤铺设及接口实地调研
  • 宜春城区SDH网图分析
  • 设计模式Books Reading
  • 计算机视觉----opencv(图像轮毂绘制(大小选择,排序,外接图形绘制),轮廓的近似,模板的匹配)
  • mybatis.xml直接读取配置文件(application.yml)中的数据
  • java数据结构--排序
  • 工业相机的类型及不同类型的应用
  • Python 实战:内网渗透中的信息收集自动化脚本(5)
  • 2025.8.29总结
  • MFC视图中绘制图形缩放和滚动条的处理
  • C/C++---预定义常量
  • Fast-LIVO2算法与其他激光雷达-惯性-视觉里程计算法相比有何优势?
  • 【LeetCode 热题 100】62. 不同路径——(解法二)递推
  • Spring Security 传统 web 开发场景下开启 CSRF 防御原理与源码解析
  • “我店 + RWA”来袭:重构商业价值,解锁消费投资新密码
  • 大模型入门学习微调实战:基于PyTorch和Hugging Face电影评价情感分析模型微调全流程(附完整代码)手把手教你做
  • C++基础(④链表反转(链表 + 迭代 / 递归))
  • Linux - 中文显示乱码问题解决方法(编码查看及转换)- 学习/实践
  • 对于牛客网—语言学习篇—编程初学者入门训练—函数类型:BC156 牛牛的数组匹配及BC158 回文数解析
  • Total PDF Converter多功能 PDF 批量转换工具,无水印 + 高效处理指南
  • docker 搭建zookper集群,快照虚拟机多机模拟