Nginx关键参数配置说明
本文包含了全局阻止、http阻止、阻止、阻止的Nginx参数配置说明,共计30多个参数配置及讲解,常见参数包含配置错误导致的错误日志,可以帮助您更快的解决问题。
本文大部分参数都是我单独测试过的,错误都是我自己收集的,有问题可以私聊,感谢大家指正文档中的错误,如果文章对你有帮助,请点赞收藏,非常感谢!
1. 全局块 1. [大小] 工作进程数
用于指定进程数,通常建议设置为机器的CPU核心数,grep -c /proc/查看CPU核心数。也可以设置为自动(auto),会根据核心数进行设置。增加进程数可以提高并发处理请求的能力,设置过大会占用过多系统资源,导致系统负荷过重。
当使用量超出配置时,可能会出现以下情况: 1. 资源耗尽:nginx 配置定义了可以同时处理的最大并发连接数。如果实际的并发连接数超出配置的数量,服务器的资源(如 CPU、内存)可能会耗尽,导致服务器崩溃或变得不稳定。 2. 连接拒绝:当并发连接数超过配置的最大数量时,新的连接请求可能会被拒绝。客户端将收到连接拒绝错误消息。 3. 响应时间延长
2. [size] 最大文件描述符数量
用于设置每个进程可以打开的文件描述符(文件句柄)的最大数量限制。默认值取决于平台,在大多数 Linux 系统上,默认值为 1024。
在Linux中,每个进程都有一个文件描述符表,当进程打开一个文件时,系统会给这个文件分配一个文件描述符,通过文件描述符表就可以进行读写操作,可以简单理解为可以建立的连接数。
由于每个连接都打开一个文件描述符,因此服务器可以同时处理的连接数受系统上的文件描述符数限制。文件描述符的数量是有限的,取决于系统配置(通常为 1024)和系统限制(设置),使用 -n 查看。
如果进程需要打开的文件数超出了允许的文件描述符数上限,那么文件描述符就会被耗尽,一般日志会报错:“...(24:Too many open files)”或者“54219 with fatal code 2 and be”,浏览器加载时会卡住。
2. Block 1.use[]; IO模型
现在我们使用的Linux支持的IO模型包括epoll、epoll、epoll等。其中最主流的是epoll,它是一套完整的事件机制,可以实现多个IO复用。当某个IO被阻塞时,可以继续处理其他IO,然后等这个IO处理完后再触发事件回调继续处理。这个选项通常不需要明确指定,因为Nginx会默认使用当前系统中最有效的模式。
2.\ [开/关];连接复用
用于控制是否开启“接受新连接”的多路复用。其默认值为off,即不启用多路复用。默认情况下,Nginx 采用异步处理方式处理请求,对于每个新连接请求,Nginx 都会创建一个新的进程来处理。当设置为“on”时,Nginx 允许同时接受多个新连接,多个进程可以同时接受新连接,提高并发处理能力。当设置为“off”时,Nginx 只会顺序接受新连接,一个进程只能处理一个新连接,降低并发能力。
将此设置为“on”可以提高 Nginx 的性能,特别是在高并发场景下。但在低并发或资源有限的场景下,多个进程同时接受连接可能会导致系统资源的消耗。
3.[size];每个进程的最大连接数
用于设置每个进程的最大连接数。每次客户端连接 nginx 时,都会占用一个连接。如果达到最大值,nginx 将不再接受新的客户端连接,后续连接将处于等待状态。这个数字包括所有连接(如后台服务器的连接等),而不仅仅是客户端的连接。还有一个考虑就是实际同时连接数不能超过当前最大打开文件数,也就是不要超过设置的数量。
理论上nginx服务器的最大连接数为*,做反向代理时为:( * )/2,超过该值时客户端请求页面会卡在加载状态,等待空闲连接,nginx日志会报错:()(22: )。
三、http block (一)请求处理(客户端与nginx服务) 1.请求头处理 1.1 _size;请求头缓冲区空间
_size用于设置客户端请求的请求行+请求头的缓冲区大小。_size的默认值为1k或者4k,取决于操作系统。默认情况下,如果操作系统的页面大小是4k,则_size的默认值为1k。如果操作系统的页面大小是8k,则_size的默认值为4k。一般默认值为1k。当Nginx接收到一个HTTP请求时,会先读取请求行和请求头,然后将其存放到一个缓冲区中。当请求行+请求头的大小超出_size指定的大小时,会先按照配置的大小来处理。如果还是超出范围,Nginx会返回一个HTTP 400 Bad的响应。
1.2 请求头的最大缓冲空间
用于设置 nginx 服务器用于接收和缓存客户端请求头的缓冲区大小。该指令用于处理较大的客户端请求或者包含大量请求头的请求。默认值为 4 8k,也就是说 nginx 为请求头分配 4 个 8k 的缓冲区。这意味着 nginx 服务器将使用总共 32 KB 的内存来缓存客户端请求头。请求行(line)的大小不能超过 8k,否则会返回 414-URI Too Large 错误。请求头()中每个头字段的大小不能超过 8k,否则会返回 400 Bad 或 400 Or Too Large 错误,总大小(请求行 + 请求头)不能超过 32k(4 * 8k)。
1.3 t [time] 请求头超时
t定义了nginx读取客户端请求头的超时时间,默认值为60s,如果客户端在此时间内没有将完整的请求头发送给Nginx,那么与客户端的连接将会断开,Nginx将向客户端返回408(Time-out)错误。
2.请求体处理 2.1 【大小】
用于限制客户端请求体的最大大小,默认值为 1m()。当客户端向 NGINX 发送请求时,请求体中可以包含数据,例如表单数据或者在 POST 或 PUT 请求中发送的文件。该指令用于设置 NGINX 接受的最大请求体大小。如果客户端请求体超出指定的最大大小,NGINX 将返回错误响应,通常是“413 Too Large”,并且不会将请求体传递给后端应用服务器。该值需要根据后端服务器接受的请求体大小进行配置。例如,如果使用 JBoss,则需要根据 .xml 文件中的实际参数进行大小配置。
2.size [尺寸]
ize 是用于指定客户端请求体缓冲区大小的配置项。在老版本的 nginx 中(Nginx 1.17.x 之前)默认值为 ize 8k,而在新版本的 nginx 中默认值为 ize 16k。当客户端发送请求体时,nginx 会将数据暂时存放在缓冲区中,然后根据配置进行处理。如果请求的数据小于 ize,则直接先将数据存放在内存中;如果请求的值大于 ize 但小于 ize,则先将数据存放在临时文件中。默认情况下位于当前运行的 Nginx 程序的目录中,可以通过 h 手动设置。
2.3 [尺寸]
用于定义读取客户端请求体的超时时间,默认值为60s。当客户端向服务器发送请求,且请求中包含请求体(如POST请求)时,服务器需要等待客户端将请求体发送完整。如果连接建立后,客户端在这段时间内没有传输完所有数据,那么与客户端的连接将会断开,Nginx会返回408(Time-out)错误给客户端,与t相同。
2.4 小时
定义存储客户端请求体的临时文件的目录。没错,就是存储超过size设置的大小的数据的临时文件的位置。默认位于当前运行的Nginx程序的目录中。配置方法如下:h /spool/nginx/ 1 2;
仅限 2.5 [清洁/关闭/打开]
该指令禁用 NGINX 缓冲并将请求主体存储在临时文件中。该文件包含纯文本数据。该指令在 NGINX 配置的 http 和块中使用。可能的值有:
off:此值将禁用文件写入。
clean:请求主体将被写入文件。请求处理完成后,该文件将被删除。
on:请求主体将写入文件。请求处理完成后,不会删除该文件。
默认情况下,该指令值为 off。
2.6 [开/关]
该指令设置 NGINX 将完整的请求主体存储在单个缓冲区中。默认情况下,该指令值为 off。如果启用,它将优化读取 $ 变量所涉及的 I/O 操作。建议在使用 $ 变量时使用它,这样可以节省引入的复制操作。
(二)代理区域处理(nginx 和后端服务器) 1. 响应缓冲区 1.1 [on/off] 启用响应缓冲区
该指令启用对来自后端服务器的响应主体的缓冲。默认值为 on。如果启用,nginx 假定后端服务器将以最快的速度做出响应,并将内容保存在指令指定的缓冲区中。如果响应主体无法放入内存,则部分内容将写入磁盘。如果关闭,则响应主体将根据获取的 body 量立即同步传输到客户端。nginx 不会尝试计算后端服务器整个响应主体的大小。nginx 可以从服务器接受的最大数据由该指令指定。对于基于长轮询的 Comet 应用程序,将其关闭非常重要,否则异步响应将被缓存,Comet 将无法工作。但无论启用与否,它都是有效的。如果此设置关闭,和 size 两个指令将无效。
1.2 [][size] 代理缓冲区空间
:每个进程的代理缓冲区数量。size:每个缓冲区的大小,可以使用字节(B)、千字节(K)、兆字节(M)或千兆字节(G)作为单位。
默认值为 8 4k|8k,具体是 4K 还是 8K,取决于服务器。8 4k 表示每个进程可以使用 8 个大小为 4k 的缓冲区。可以使用该参数控制是否启用代理缓冲,默认情况下是关闭的。如果禁用代理缓冲,该参数将不起作用。
1.3 [size] 单个代理缓冲区空间
该指令指定单个代理缓冲区的大小。默认值为 4k 或 8k,具体取决于服务器。当 Nginx 作为代理服务器时,它会将上游服务器的响应存储在缓冲区中,然后再将其传输到客户端。该大小用于存储响应头。如果超过此值,将返回 502 (Bad)。将出现错误 nginx 提示界面。
1.4 ze [size] 响应临时缓冲空间
ize 的默认值是 *2。Nginx 服务器在读取上游服务器的响应时,临时的缓冲区大小。ize 并不是一个独立的空间,它是 and 的一部分。Nginx 还没有完全读完后端响应就会开始向客户端传输数据,所以会分配一部分 busy 状态的用来向客户端传输数据(建议为单个缓冲区 in 大小的 2 倍),之后才继续从后端取数据。ze 参数用来设置 busy 状态有多大。 (1) 如果完整数据大小小于 ze 大小,那么数据传输完成后会立即传输给客户端; (2) 如果完整数据大小不小于 ze 大小,那么写满之后会立即传输给客户端。
上述配置有效:
开启后,Nginx 会尝试读取客户端传输的所有数据,直到所有端口都写满或者数据读完(EOF)。此时 nginx 开始向客户端传输数据,同时传输整个端口字符串,同时如果内容较大,Nginx 会接收并写入端口,大小由 size 控制,如果繁忙传输完毕,会继续从中读取数据,直到传输完成。
一旦设置写入之后,它会一直处于繁忙状态,直到里面的数据完全传输完毕(传输到客户端),我们无法对其执行任何其他操作。繁忙状态下所有size的总和不能超过size,所以size是用来控制同时传输到客户端的数量的。
2.代理时间设置 2.1 t[time];代理连接超时
代理连接超时时间:指定nginx与后端服务器建立连接的超时时间,默认为60秒。如果在此时间内无法与后端服务器建立连接(不考虑服务器的业务处理时间,比如网络不可用),nginx将会中断此次连接尝试,nginx将认为该服务器不可用,将自动切换到可用的服务器。并且会记录次数,当次数达到设定值时,将从负载均衡中移除该服务器,后续请求将不再转发。移除时间根据决策而定。如果在此期间检测到服务器可用,则立即将其加入到负载均衡中。如果在t时间内后端服务恢复,则立即建立连接。
日志错误记录:()(110:超时)
2.2 [time];代理响应超时
Nginx 服务器读取后端服务器响应的超时时间,默认超时时间为 60 秒。如果 Nginx 在代理请求过程中,在指定的时间内没有收到后端服务器的响应,则会终止与后端服务器的连接,不会自动切换到其服务,并返回 504 错误给客户端,并计为一次错误记录在服务器中。当达到错误次数时,下一次请求将切换到其他可用的后端服务器。
日志记录:超时(110:超时)
2.3 [time];代理请求发送的时间
用于设置nginx服务器向后端服务器发送请求的超时时间,默认值为60s,当nginx作为代理服务器向后端服务器转发请求时,如果发送请求的时间超过了设置的时间,nginx将会断开与后端服务器的连接,并添加错误次数,当达到该次数后,下一次请求将会切换到另一台服务器。
(三)区块 1.=[] 最大失败次数
:默认值为1,表示连续请求失败次数超过此值后,Nginx 将认为后端服务器不可用。当一次请求失败时,它会增加1;当一次请求成功时,它会被重置为0。一旦达到该值,Nginx 将不再向服务器发送请求,直到时间过去,然后重试请求。
2.=[time];失败超时
:默认值为10秒,表示在一系列失败的请求之后,Nginx 会暂时将后端服务器标记为不可用,并等待一段时间后再重试请求。在这段时间内,Nginx 不会向服务器发送请求。如果服务器在该时间内恢复正常,Nginx 将再次开始向服务器发送请求。
(四)缓存模块
在一定程度上可以减轻服务器处理请求的压力。比如你缓存了一些图片,css或者js,那么每次刷新浏览器的时候就不会再请求了,而是从缓存中读取。这样可以减轻服务器的压力。注意:当缓存中有jsp代码的时候就会出现问题,jsp文件中的动态数据不正确,比如使用java代码赋值。因为nginx缓存了jsp文件之后,你查看缓存文件的时候可以发现nginx缓存的jsp文件中的动态数据是硬编码的,后续访问直接返回jsp,没有动态更新。
1.缓存路径及其他参数
例如:
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。