Nginx 配置详细讲解
Nginx.conf 配置文件分为三部分,分别为main块、events块、http块(http块又包含server块和location块),如下图。
第一部分:main块(全局块)
main块主要是设置一些影响Nginx服务器整体运行的配置指令,主要包括:配置运行Nginx服务器的用户(组)、允许生成的 worker process数,进程PID存放路径、日志存放路径、类型以及配置文件的引入等。
# 配置nginx进程运行用户(组),nobody也是一个Linux用户,一般用于启动程序,没有密码
#user nobody; # 用户组# 确定nginx是否以守护进程方式运行,主要用于开发期间
# daemon on | off
# daemon on; # 默认值# 并发处理进程数量,通常等于cpu数量或者2倍cpu数量。
# 也可以将其设置为auto。这样Nginx自动根据核心数生成对应数量的worker进程
# worker_processes number | auto;
worker_processes 1; #默认值为1,意味着Nginx只运行一个worker# nginx进程pid存放路径
#pid logs/nginx.pid;# 存储错误日志
# error_log file [level]
error_log /usr/logs/nginx/error.log; # 绝对路径
#error_log logs/error.log error; # 默认配置。相对路径,nginx安装目录下# nginx worker能打开的最多文件数量
worker_rlimit_nofile 65535# 线程池
# thread_pool name threads=number [max_queue=number];
# thread_pool default threads=32 max_queue=65536; #默认值
一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与Nginx进程数相除,但是Nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。
1.1 user 用户(组)
1.2 worker_processes
worker_processes 配置,是 Nginx 服务器并发处理服务的进程数量,该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的约束,通常等于cpu数量或者2倍cpu数量。也可以配置成auto。
1.3 error日志
Nginx error日志可通过内置指令进行配置,既可以输出到本地,也可以输出给rsyslog或内存缓存区(通常用于调试),甚至可以发送给另一台服务器的rsyslog应用进行处理。
格式:error_log + 存储路径 + 错误级别(如果不定义,默认级别是error)
Syntax: error_log file [level];
Default: error_log logs/error.log error;
Context: main, http, mail, stream, server, location
存储路径分三类,本机存储、发送给rsyslog、本机memory
1.3.1 存储路径 - 本机存储 /path
注意配置的存储路径,nginx需要有读写权限,否则日志创建失败。
error_log /usr/logs/nginx/error.log; # 绝对路径
error_log logs/error.log notice; # 默认配置。相对路径,nginx安装目录下
1.3.2 存储路径 - syslog
该配置方式是将nginx error日志发送给本机或另一台服务器的rsyslog服务进行处理。
error_log syslog:server=47.93.88.999 debug;# 或者是自定义
error_log syslog:server=47.93.88.999:515,facility=local1,severity=warn,tag=nginx_client warn;
server:指定syslog服务器的IP和端口。如未指定端口,则用UDP端口514。IP也可以写成域名,如果域名解析为多个IP地址,则使用第一个解析的地址。
facility:指定发送给syslog需要提供的实体/机构/服务器名称,默认是local7。可选择项有 “kern”, “user”, “mail”, “daemon”, “auth”, “intern”, “lpr”, “news”, “uucp”, “clock”, “authpriv”, “ftp”, “ntp”, “audit”, “alert”, “cron”, “local0”…“local7”。
severity:指定事件/日志级别。这里指的并不是nginx的错误日志级别,而是发送给rsyslog需要记录的日志级别。默认是info。
tag:标签/标识,也可以理解为是发送者/应用身份的标识。默认是nginx。
warn:这个warn是nginx的错误级别。指定要将什么级别的日志发送个rsyslog server。默认是error。
总结:哪台机器(facility)要将由谁(tag)产生的何类日志(nginx错误日志级别)发送给谁(server),并记录成什么级别(severity)。
1.3.3 存储路径 - memory
主要用于调试期间使用,将日志记录到内存缓冲区。
1.3.4 错误级别
nginx的错误级别分为 debug | info | notice | warn | error | crit | alert | emerg ,从左到右,级别从低到高。我们其他的各种编译器输出日志的逻辑差不多。级别越低输出的错误日志就会越多。生产环境建议设置在warn及以上。否则会有大量的IO请求,耗费系统资源。
1.4 worker_rlimit_nofile
Syntax: worker_rlimit_nofile number;
Default: —
Context: main
设置工作进程能打开的文件数量上限。理论上这个值应该是最多打开文件数(ulimit -n)与nginx工作进程相除。这里与最好与ulimit -n 或者limits.conf的值保持一致。ulimit -n 默认值是1024,如果不调整,worker_rlimit_nofile设置的值大于1024时将不起作用。
查看系统设置的最大打开文件数量值,使用ulimit -n 或ulimit -a命令。
[root@reader ~]# ulimit -n
65535 # 我这里已经设置过了
[root@reader ~]# ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 14445
max locked memory (kbytes, -l) 16384
max memory size (kbytes, -m) unlimited
open files (-n) 65535 # 最大打开文件数量
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 14445
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
设置最大文件打开数量值。在/etc/security/limits.conf配置文件最后增加如下两行代码。
* soft nofile 65535
* hard nofile 65535
1.5 线程池thread_pool
# in the 'main' context
thread_pool default threads=32 max_queue=65536;# in the 'http', 'server', or 'location' context
aio threads=default;
Syntax: thread_pool name threads=number [max_queue=number];
Default: thread_pool default threads=32 max_queue=65536;
Context: main
定义线程池线程数量和最多等待请求数量。
thread_pool default threads=32 max_queue=65536; # max_queue可省略,其默认值是65536
这里定义了一个名为“default”,包含32个线程,任务队列最多支持65536个请求的线程池。如果任务队列过载,NGINX将拒绝请求并输出如下错误日志:
上面这行代码定义了一个名为“default”,包含32个线程,任务队列最多支持65536个请求的线程池,如果任务队列过载,nginx会拒绝请求并输出如下错误日志:
thread pool "NAME" queue overflow: N tasks waiting
如果出现上述错误,说明线程池的负载很高,可以尝试通过增加线程数来解决这个问题。一个进程/cpu最多不要超过50线程,可根据自己机器的压测结果进行调整。
最后要说明的是,可以配置多个相互独立的线程池,并在配置文件的不同位置使用它们来满足不同的用途:
# in the 'main' context
thread_pool one threads=1024 max_queue=3000;
thread_pool two threads=512 max_queue=3000;
thread_pool three threads=256 max_queue=3000;http {server {location /one {aio threads=one;}location /two {aio threads=two;}location /three {aio threads=three;}}#...
}
第二部分:events块
第三部分:http块
http块中可以配置多个server块,每个server块中可以配置多个location块
相关文章:

Nginx 配置详细讲解
Nginx.conf 配置文件分为三部分,分别为main块、events块、http块(http块又包含server块和location块),如下图。 第一部分:main块(全局块) main块主要是设置一些影响Nginx服务器整体运行的配置指令,主要包括…...

gdb 日志记录不显示到屏幕的方法(gdb13最新版)
tags: gdb categories: [Debug] 写在前面 gdb 的更新好快啊… 之前的选项都有改动了, 比如 logging… 需要屏幕重定向不能简单设置: set logging on set logging redirect on了, 而是要多开一个配置, 踩坑了 方法 在此之前先看一下我的 gdbinit 配置: set debuginfod e…...

JAVA智慧工地管理系统源码基于微服务
智慧工地是将互联网的理念和科技引入施工现场,从施工现场源头抓起,大程度的收集人员、安全、环境、质量等关键业务数据。通过结合物联网、大数据、互联网、云计算等技术建立云端大数据管理平台,形成端云大数据的体系与模式,这就是…...

学习笔记三十四:Ingress和 Ingress Controller概述
Ingress和 Ingress Controller概述 回顾service四层负载在k8s中为什么要做负载均衡Service不足之处四层负载和七层负载的区别OSI七层模型: Ingress介绍Ingress Controller介绍Ingress-controller 作用Ingress和Ingress Controller总结使用Ingress Controller代理k8s…...

Webpack的Tree Shaking。它的作用是什么?
聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

研发效能DevOps: Git安装
目录 一、理论 1.Git 2.Git 工具 二、实验 1.Git安装 2.配置Git 3. VS Code加载Git 一、理论 1.Git (1)简介 Git 是一个分布式版本控制及源代码管理工具;Git 可以为你的项目保存若干快照,以此来对整个项目进行版本管理。 Git 是一个…...

ZZ038 物联网应用与服务赛题第D套
2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 (D卷) 赛位号:______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等; 2.竞赛任务中所使用的各类软件工具、软件安装文件等,都…...

基于STM32设计的室内环境监测系统(华为云IOT)_2023
一、设计需求 基于STM32+华为云物联网平台设计一个室内环境监测系统,以STM32系列单片机为主控器件,采集室内温湿度、空气质量、光照强度等环境参数,将采集的数据结果在本地通过LCD屏幕显示,同时上传到华为云平台并将上传的数据在Android移动端能够实时显示、查看。 【1…...

UE5C++学习(一)--- 增强输入系统
一、关于增强输入系统的介绍 增强输入系统官方文档介绍 二、增强输入系统的具体使用 注:在使用方面,不会介绍如何创建项目等基础操作,如果还没有UE的使用基础,可以参考一下我之前UE4的文章,操作差别不会很大。 如上…...

好物周刊#29:项目管理软件
https://github.com/cunyu1943/JavaPark https://yuque.com/cunyu1943 村雨遥的好物周刊,记录每周看到的有价值的信息,主要针对计算机领域,每周五发布。 一、项目 1. HelloGithub 分享 GitHub 上有趣、入门级的开源项目。每月 28 号以月刊…...

玻色量子“天工量子大脑”亮相中关村论坛,大放异彩
2023年5月25日至30日,2023中关村论坛(科博会)在北京盛大召开。中关村论坛(科博会)是面向全球科技创新交流合作的国家级平台行业盛会,由科技部、国家发展改革委、工业和信息化部、国务院国资委、中国科学院、…...

使用Gorm进行高级查询
深入探讨GORM的高级查询功能,轻松实现Go中的数据检索 高效的数据检索是每个应用程序性能的核心。GORM,强大的Go对象关系映射库,不仅扩展到基本的CRUD操作,还提供了高级的查询功能。本文是您掌握使用GORM进行高级查询的综合指南。…...

基于梯度算法的无人机航迹规划-附代码
基于梯度算法的无人机航迹规划 文章目录 基于梯度算法的无人机航迹规划1.梯度搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用梯度算法来优化无人机航迹规划。 1.梯度搜索算法 …...

【工具】【IDE】Qt Creator社区版
Qt Creator社区版下载地址:https://download.qt.io/archive/qt/ 参考:https://cloud.tencent.com/developer/article/2084698?areaSource102001.8&traceIduMchNghqp8gWPdFHvSOGg MAC安装并配置Qt(超级简单版) 1.安装brew&…...

王道p18 6.从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同(c语言代码实现)
视频讲解在这里:👇 顺序表p18 第6题wd数据结构课后代码题(c语言代码实现)_哔哩哔哩_bilibili 本题代码如下 void deleterepeat(struct sqlist* L) {if (L->length 0)printf("表空");int i 0;int k 0;for (i 1…...

Python入门:6个好用的Python代码,快来收藏!
文章目录 1.类有两个方法,一个是 new,一个是 init,有什么区别,哪个会先执行呢?2.map 函数返回的对象3.正则表达式中 compile 是否多此一举?4.[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]5.一行代码将字符…...

Linux常用指令(二)——文件管理
Linux文件管理 2.1 创建文件 touch2.2 复制文件 cp2.3 删除文件 rm2.4 移动文件 mv2.5 重命名文件 rename2.6 查看文件 cat2.7 查看文件的类型 file2.8 编辑文件 vim2.9 打印文件内容 cat2.10 变更文件所有者 chown2.11 修改文件权限 chmod 更加完整的Linux常用指令 2.1 创建文…...

AI开源 - LangChain UI 之 Flowise
原文:AI开源 - LangChain UI 之 Flowise 一、Flowise 简介 Flowise 是一个为 LangChain 设计的用户界面(UI),使得使用 LangChain 变得更加容易(低代码模式)。 通过拖拽可视化的组件,组建工作流,就可以轻…...

java的集合类中哪些可以添加不同类型数据,哪些不可以?
在Java的集合类中,有些可以添加不同类型的数据,而有些则要求元素类型必须一致。以下是一些常见的Java集合类及其对元素类型的要求: 1、ArrayList ArrayList可以添加不同类型的数据,因为它使用了泛型,可以存储任何类型…...

基于51单片机的烟雾和温湿度检测控制系统仿真(智能防火系统,火灾报警灭火系统)
wx供重浩:创享日记 对话框发送:单片机防火 获取完整源码源文件仿真源文件论文报告说明文档等 基于51单片机的光照及温湿度检测报警控制系统 由STC89C52单片机LCD1602液晶显示屏ADC0832模块蜂鸣器DHT11温湿度传感器 烟雾传感器LED按键构成 具体功能&…...

【多线程】静态代理
当使用静态代理模式时,我们会有一个真实的对象(RealSubject),一个代理对象(ProxySubject),代理对象将请求转发给真实对象,并可以在请求前后执行额外的操作。 真实对象和代理对象要实…...
线性代数 第二章 矩阵
一、概念 个数排成的m行n列的表格 二、运算法则 三、初等变换 (1)用非零常数k乘矩阵的某一行(列); (2)互换矩阵某两行(列)的位置; (3&#…...

vue实现自定义字体
1、字体资源查找 网址 https://eng.m.fontke.com/ 选择想要的字体之后下载 获取文件夹内的.ttf文件 2 、字体引入 在项目根目录下新建font文件夹,将ttf文件放在里面 3、相应的页面vue文件中引入 在style标签中加上 font-face { font-family: ‘ZCOOLXiaoWei’…...

Selenium安装WebDriver Chrome驱动(含 116/117/118/119/120/)
1、确认浏览器的版本 在浏览器的地址栏,输入chrome://version/,回车后即可查看到对应版本 2、找到对应的chromedriver版本 2.1 114及之前的版本可以通过点击下载chromedriver,根据版本号(只看大版本)下载对应文件 2.2 116版本…...

springboot的安全机制
一.jwt Spring Boot是一个用于开发Java应用程序的开源框架,它提供了一种快速、简单和可扩展的方式来构建独立的、生产级别的应用程序。在最新的版本Spring Boot 2.5中,引入了对JWT(JSON Web Token)的支持。本文将介绍如何在Spring Boot 2.5中使用JWT,并提供一个简单的示例…...

学习c++的第四天
目录 运算符 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 运算符优先级 运算符 算术运算符 算术运算符是 C 中用于执行基本算术操作的运算符。 加法运算符 ():将两个操作数相加。例如,A B 将得到 30,因为 …...

BIOS开发笔记 – 显示
UEFI启动流程跑完前三阶段,UEFI环境的准备基本完成,到BDS阶段的任务就是准备引导OS。在此之前还需要使一些必要的硬件工作起来,比如键盘设备,屏幕等,怎么让屏幕工作呢?简单的说就是执行其相关的UEFI驱动。要注意一下的是,这里所说的驱动并不是屏幕的驱动,而是GPU的驱动…...

数据库实验:SQL的数据视图
目录 视图概述视图的概念视图的作用 实验目的实验内容实验要求实验过程 视图概述 视图是由数据库中的一个表或多个表导出的虚拟表,其作用是方便用户对数据的操作 视图的概念 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一…...

k8s-调度约束
目录 工作机制 调度过程 指定调度节点 亲和性 键值运算关系 Pod亲和性与反亲和性 污点(Taint) 和 容忍(Tolerations) 维护操作 故障排除步骤 Kubernetes 是通过 List-Watch 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了…...

C++设计模式_26_设计模式总结
本篇为C++设计模式的总结课,此篇再回到原帮助大家梳理一下。 文章目录 1. 一个目标2. 两种手段3. 八大原则4. 重构技法5. 从封装变化角度对模式分类6. C++对象模型7. 关注变化点和稳定点8. 什么时候不用模式9. 经验之谈10. 设计模式成长之路1. 一个目标 管理变化,提高复用!…...