亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述Nginx模块介绍及指定配置项含义相关的知识,希望能为你提供帮助。
nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器以及TCP/UDP代理服务器,它具有以下特性:模块化设计,较好的扩展性;高可靠性;支持热部署,不停机更新配置文件,升级版本,更换日志文件;低内存消耗,10000个keep-alive连接模式下的非活动连接仅需2.5M内存;event-driven、aio、mmap和sendfile等。
- Nginx模块分类
1.1 核心模块
核心模块是Nginx服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件驱动机制 、进程管理等核心功能。?
1.2 标准HTTP模块
标准HTTP模块提供HTTP协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置等。?
1.3 可选HTTP模块
可选HTTP模块主要用于扩展标准的 HTTP 功能,让Nginx能处理一些特殊的服务,比如:Flash多媒体传输 、解析GeoIP请求、 网络传输压缩 、 安全协议SSL支持等。?
1.4 邮件服务模块
邮件服务模块主要用于支持 Nginx 的邮件服务,包括对POP3协议、IMAP 协议和SMTP协议的支持。?
1.5 Stream服务模块
Stream服务模块用于实现反向代理功能,包括TCP协议代理。
1.6 第三方模块
第三方模块是为了扩展Nginx服务器应用,完成开发者自定义功能,比如:Json支持、Lua支持等。
从Nginx模块图可以看出,常见的核心模块有ngx_core、ngx_errlog、ngx_conf、ngx_events、ngx_poll和ngx_regex。
- Nginx指定配置项含义
①配置文件由指令与指令块构成;
②每条指令以; 分号结尾,指令与值之间以空格符号分隔;
③可以将多条指令放在同一行,用分号分隔即可,但可读性差,不推荐此种方式;
④指令块以 大括号将多条指令组织在一起,且可以嵌套指令块;
⑤include语句允许组合多个配置文件以提升可维护性;
⑥使用#符号添加注释,提高可读性;
⑦使用$符号使用变量;
⑧部分指令的参数支持正则表达式。
2.1 worker_processes
worker_processes记录启动Nginx工作进程的数量,一般设为和CPU核心数相同。例如笔者这边用于实验的CentOS8虚拟机是2核的,通过yum安装的Nginx服务在开启后,配置文件中worker_processes部分显示的是auto(部分版本可能会默认设为1),即默认与虚拟机CPU核数相同,查看进程部分,也是显示两个工作进程。
通常情况下,Nginx的进程数设为1已经够用,但如果涉及到ssl、gzip等比较消耗CPU的工作,可以适当调大worker_processes值来提高IO性能,一般为CPU核数的1-2倍。
2.2 worker_cpu_affinity
worker_cpu_affinity这一配置项可以将Nginx工作进程绑定到指定的CPU核心上。默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。
例如笔者在worker_processes值为auto的情况下查看工作进程绑定情况,虽是都在0号CPU上,但是是不稳定的,进程仍有可能跳转到其他CPU核心上,此时可以在配置文件中添加“worker_cpu_affinity”一行,后面跟上不同的CPU核心编号,则是按序将进程绑定的对应CPU核心上工作。
2.3 worker_rlimit_nofile
worker_rlimit_nofile这一配置项规定了所有worker进程能打开的文件数量上限,包括Nginx的所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接,另一个考虑因素是实际的并发连接数不能超过系统级别的最大打开文件数的限制,最好与ulimit -n或者limits.conf的值保持一致。
系统中默认的最大打开文件数为1024,实际生产中基本是不够用的,可以根据需求改大,例如将Nginx服务的最大文件打开数改成65536,系统级别的改为100000,但此种方法只是临时调整最大打开文件数,重启后会失效。
如果想保证重启后不失效,还需修改PAM模块,在/etc/security/limits.conf添加相关信息。
2.4 worker_connections
worker_connections用于设置单个工作进程的最大并发连接数,作为web服务器的时候最大并发数为worker_connections * worker_processes,作为反向代理的时候为(worker_connections * worker_processes)/2。此外要注意的是,最大并发连接数不能超过worker_rlimit_nofile部分设置的上限值,生产中需根据实际对该部分以及worker_rlimit_nofile上限值或worker_processes值进行调整。
推荐阅读
- 4.18-4.24博客精彩回顾
- 编译安装Nginx,实现多域名 HTTPS
- 运维小白成长记——第十六周
- 拔掉网线后, 原本的 TCP 连接还存在吗()
- Java 并发编程实战-创建和执行任务的最佳实践
- k8s集群service流量服务代理5大严肃思考()
- 在 TIME_WAIT 状态的 TCP 连接,收到 SYN 后会发生什么()
- Python 工匠(使用数字与字符串的技巧)
- Azure Virtual Desktop 快速上手--AZURE AD JOIN