Nginx 配置详细讲解

news2024/11/28 14:52:36

        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块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1172465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.8 CSS 伸缩盒模型

1.模型简介 传统布局是指:基于传统盒状模型,主要靠: display 属性 position 属性float 属性。2009年,w3C提出了一种新的盒子模型——Flexible Box(伸缩盒模型,又称:弹性盒子)。它可以轻松的控制:元素分布方式、元素对齐方式、元素视觉顺序..…

0008Java安卓程序设计-ssm基于Android平台的健康管理系统

文章目录 **摘要**目录系统实现开发环境 编程技术交流、源码分享、模板分享、网课教程 🐧裙:776871563 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,…

那些看起来高大上的封装函数

什么 ToGray 只支持3通道图像, 让我看看怎么个事 就这么生硬的加了个判断 好家伙 调用了下opencv ,通道数都不判断一下

Java多线程面试题:如何在多个子线程中捕获异常并引发主线程异常?

亲爱的小伙伴们,大家好!我是你们的小米,今天我要和大家分享一个热门的技术话题——"面试题:多个子线程中,其中一个子线程异常时主线程如何抛出异常并返回?"。这是在面试中经常被问到的问题&#…

【多线程】Lambda表达式

package org.example;public class TestLambda {public static void main(String[] args) {Like likenew Like();like.lambda();}}//定义一个函数式接口 interface ILike{void lambda(); }//实现类 class Like implements ILike{Overridepublic void lambda() {System.out.prin…

Vue Vue3

1、创建VUE3工程 使用vue-cli创建: ## 查看vue/cli版本,确保vue/cli版本在4.5.0以上 vue --version ## 安装或者升级你的vue/cli npm install -g vue/cli ## 创建 vue create vue_test ## 启动 cd vue_test npm run serve 使用vite创建: …

【笔记】单片机卡死的八大原因和解决方法

在微控制器上,程序卡住(即停止执行)可能有多种原因。下面我将列举一些常见的原因,并提供一些可能导致程序卡住的示例情况。请注意,这里只是一些示例,并不能穷尽所有可能的情况。 1. 死循环(Infi…

基于若依的ruoyi-nbcio流程管理系统增加仿钉钉流程设计(六)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 这节主要讲条件节点与并发节点的有效性检查,主要是增加这两个节点的子节点检查,因为…

C/C++输出字符菱形 2021年3月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C输出字符菱形 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C输出字符菱形 2021年3月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 给定一个字符,用它构造一个对角线长…

学习c++的第十天

目录 类 & 对象 类定义 对象的建立和使用 构造函数(Constructor) 析构函数(Destructor) 拷贝构造函数 扩展知识 this指针 友元函数的使用方法 友元类的使用方法 常数据的使用及初始化 类 & 对象 什么是类?什么是对象?对于面向对象的…

【黑马程序员】SSM框架——SpringBoot(未完成)

文章目录 前言一、SpringBoot 简介1. 入门案例1.1 入门程序① 创建新模块② 选择当前模块需要使用的技术集③ 开发控制类④ 运行自动生成的 Application 类 1.2 创建 SpringBoot 程序的两种方式1.2.1 最简 SpringBoot 程序所包含的基础文件1.2.2 基于 SpringBoot 官网创建项目 …

vue3后台管理系统之实现分页功能

例子:用户 请求格式 返回数据类型 {"code": 200,"message": "获取所有用户成功","total": 19,"totalPages": 2,"currentPage": 1,"data": [{"id": 1,"username": &qu…

6-8 最宽层次结点数 分数 10

文章目录 1.题目描述2.本题ac答案2.1法一: 代码复用2.2法二: 顺序队列实现层序遍历 3.C层序遍历求最大宽度3.1层序遍历代码3.2求最大宽度 1.题目描述 2.本题ac答案 2.1法一: 代码复用 //二叉树第i层结点个数 int LevelNodeCount(BiTree T, int i) {if (T NULL || i < 1)re…

CleanMyMacX4.16破解版激活码

CleanMyMac X是一款颇受欢迎的专业清理软件&#xff0c;拥有十多项强大的功能&#xff0c;可以进行系统清理、清空废纸篓、清除大旧型文件、程序卸载、除恶意软件、系统维护等等&#xff0c;并且这款清理软件操作简易&#xff0c;非常好上手&#xff0c;特别适用于那些刚入手苹…

卡尔曼家族从零解剖-(04)贝叶斯滤波→细节讨论,逻辑梳理,批量优化

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解的 卡尔曼家族从零解剖 链接 :卡尔曼家族从零解剖-(00)目录最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/133846882 文末正下方中心提供了本人 联系…

C++虚表与虚表指针详解

类的虚表 每个包含了虚函数的类都包含一个虚表。 当一个类&#xff08;B&#xff09;继承另一个类&#xff08;A&#xff09;时&#xff0c;类B会继承类A的函数的调用权。所以如果一个基类包含了虚函数&#xff0c;那么其继承类也可调用这些虚函数&#xff0c;换句话说&…

系统设计中的缓存技术:完整指南

Image.png 缓存是软件工程中用于提高系统性能和用户体验的基本技术。它通过临时存储频繁访问的数据在缓存中&#xff0c;缓存比数据的原始来源更容易访问。 作为一名软件工程师&#xff0c;了解缓存以及它在不同类型的系统中的工作方式是至关重要的。在本文中&#xff0c;我们将…

linux 查看当前目录下每个文件夹大小

要在 Linux 中查看当前目录下每个文件夹的大小&#xff0c;可以使用 du 命令&#xff08;磁盘使用情况&#xff09;结合其他一些选项。下面是几个常用的命令示例&#xff1a; 显示当前目录下每个文件夹的大小——只显示一层文件夹&#xff1a; du -h --max-depth1该命令会以人…

微信小程序授权登录获取用户的openid

小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识&#xff0c;快速建立小程序内的用户体系然而因为小程序中的openid不可以直接使用需要用code&#xff08;登录凭证&#xff09;去换取openid 获取openid的思路 获取openid首先需要调用小程序的login方法…

佳易王配件进出库开单打印进销存管理系统软件下载

用版配件进出库开单打印系统&#xff0c;可以有效的管理&#xff1a;供货商信息&#xff0c;客户信息&#xff0c;进货入库打印&#xff0c;销售出库打印&#xff0c;进货明细或汇总统计查询&#xff0c;销售出库明细或汇总统计查询&#xff0c;库存查询&#xff0c;客户往来账…