你好,我是赵兴晨,97年文科程序员。
在 Nginx企业级负载均衡:技术详解系列(8)—— Nginx核心配置详解(默认配置文件)文章中,咱们讨论了Nginx核心配置文件的基础知识,然而,Nginx的知识点还有很多,总有一些精妙的细节等着咱们去发掘。
今天,咱们来深入发掘一下Nginx的全局配置指令,这些指令对于确保Nginx服务器的高效和稳定运行具有决定性的作用。
为了帮助大家更好地理解和应用,我将这些配置指令分为几个类别,让我们一一解析它们的重要性和应用场景。
正常运行的必备配置
1、用户和组:设置启动Nginx工作进程的用户和组
user nginx nginx;
2、工作进程数:根据CPU核心数设置Nginx工作进程的数量,一般设置为和CPU核心数相同 auto即可。
worker_processes [number | auto];
优化性能相关的配置
1、CPU亲和性:worker_cpu_affinity 将Nginx工作进程绑定到特定的CPU核心,减少CPU资源分配开销,提升性能。默认Nginx是不进行多进程绑定的,绑定并不是意味着当前nginx进程独占一核心CPU,但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的CPU核心上来回跳转,减少了CPU对进程资源分配与回收以及内存管理等。
以下是示例配置
worker_cpu_affinity 00000001 00000010 00000100 00001000;
用于调试及定位问题相关的配置
1、错误日志记录:error_log 设置错误日志的路径和级别,便于问题排查。
语法:error_log file [debug | info | notice | warn | error | crit | alert | emerg]
以下是示例配置
#error_log logs/error.log;
#error_log logs/error.log notice;
error_log /apps/nginx/logs/error.log error;
事件驱动相关的配置
1、进程PID文件:pid 指定nginx主进程PID文件的存放路径。
以下是示例配置
pid /usr/local/nginx/logs/nginx.pid;
其他重要配置
1、工作进程优先级:worker_priority 设置工作进程优先级,-20~20(19)
worker_priority 0;
2、文件描述符限制:worker_rlimit_nofile 所有worker进程能打开的文件数量上限,包括:Nginx的所有连接(例如与代理服务器的连接数),而不仅仅是客户端的连接,另一个考虑因素是实际的并发连接数不能超过系统级别的最大打开文件数的限制。最好与 ulimit -n 或者 limits.conf的值保持一致。
worker_rlimit_nofile 65536;
3、前台运行:daemon off; 用于测试或Docker等环境,使Nginx在前台运行。
4、工作模式:master_process off|on 控制Nginx的master-worker模式,通常用于开发调试场景,默认为on。
Events模块配置
1、最大并发连接数: worker_connections 65536; 设置单个工作进程的最大并发连接数。
2、事件驱动模型:use epoll; 使用epoll事件驱动,Nginx支持众多的事件驱动,比如select、poll、epoll,只能设置在events模块中。
3、惊群效应控制:accept_mutes on; on为同一时刻一个请求轮流worker进程处理,而防止被同时唤醒所有worker,避免多个睡眠进程被唤醒的设置,默认为off,心情求会唤醒所有worker进程,此过程称为“惊群”,因此Nginx刚安装完以后要进行适当的优化。建议设置为 on。
4、多连接接受:multi_accept on; on时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认为off,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。建议设置为on。
OK,以上就是今天的分享,感谢您的阅读,期待在下一篇文章中与您再次相遇。保持好奇,继续探索,让我们一起在技术的道路上不断前行!
最后,我为您准备了一份特别的技术学习礼物,包括:
Linux学习笔记:详尽记录了Linux的核心知识点和实用技巧。
Java基础笔记:为您打下坚实的Java编程基础。
Java面试总结:十万字的面试经验,助您轻松应对各种技术面试。
【一键领取】
领取这份资料包,您只需轻松一扫:
按住👇🏻图片,扫描二维码,备注:【大礼包】
通过好友验证后,您的的专属资料包就会立即发送给您。
Linux系统学习笔记、Java基础学习笔记、10万字Java面试总结