Nginx 核心配置详解

news2024/12/23 17:44:10

 章节

1 NGINX 的源码安装

2 NGINX 核心配置详解

3 NGINX 之 location 匹配优先级

4 NGINX 基础参数与功能 

目录

1 配置文件说明

1.1 nginx 配置文件格式说明

1.2 Nginx 主配置文件的配置指令方式:

1.3 主配置文件结构:四部分

1.4 nginx 文件作用解释

1.5 配置文件说明

2 nginx-web应用

2.1 定义进程数以及进程绑定

2.2 定义进程优先级与文件打开上限

2.3 events块

2.4 实现 nginx 的高并发配置

2.4.1 文件描述符限制

2.4.2 为什么需要调整文件描述符限制

2.4.3 临时调整

2.4.4 永久调整

2.5 http 配置块

3 核心配置示例


1 配置文件说明

nginx 官方帮助文档:http://nginx.org/en/docs/

Nginx的配置文件的组成部分:

主配置文件:nginx.conf

子配置文件: include conf.d/*.conf

fastcgi uwsgiscgi 等协议相关的配置文件

mime.types:支持的mime类型,MIME(Multipurpose Internet Mail Extensions)多用途互联网邮 件扩展类型,MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据,是设定某 种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动 使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

1.1 nginx 配置文件格式说明

配置文件由指令与指令块构成
每条指令以;分号结尾,指令与值之间以空格符号分隔
可以将多条指令放在同一行,用分号分隔即可,但可读性差,不推荐
指令块以{ }大括号将多条指令组织在一起,且可以嵌套指令块
include语句允许组合多个配置文件以提升可维护性
使用#符号添加注释,提高可读性
使用$符号使用变量
部分指令的参数支持正则表达式

1.2 Nginx 主配置文件的配置指令方式:

directive value [value2 ...];
注意
(1) 指令必须以分号结尾
(2) 支持使用配置变量
内建变量:由Nginx模块引入,可直接引用
自定义变量:由用户使用set命令定义,格式: set variable_name value;
引用变量:$variable_name

1.3 主配置文件结构:四部分

main block:主配置段,即全局配置段,对http,mail都有效
#事件驱动相关的配置
event {
...
}
#http/https 协议相关配置段
http {
...
}
#默认配置文件不包括下面两个块
#mail 协议相关配置段
mail {
...
}
#stream 服务器相关配置段
stream {
...
}

1.4 nginx 文件作用解释

[root@www ~ ] # tree /application/nginx/
# <== 如果 tree 命令找不到需要 yum intall tree -y 安装
/application/nginx/
| -- client一body一temp
| -- conf # 这是 Nginx 所有配置文件的目录, 极其重要
|	| -- fastcgi.conf				# fastcgi 相关参数的配置文件
|	| -- fastcgi.conf.default		# fastcgi.conf 的原始备份
|	| -- fastcgi_params				# fastcgi 的参数文件
|	| -- fastcgi_params.default
|	| -- koi-utf
|	| -- koi-win
|	| -- mime.types					# 媒体类型
| 	| -- mime.types.default
|	| -- nginx.conf					# 这是 Nginx 默认的主配置文件	
|	| -- nginx.conf.default				
|	| -- scgi_params				# SCgi 相关参数文件 , 一般用不到
|	| -- scgi_params.default
|	| -- uwsgi_params				# uwsgi 相关参数文件, 一般用不到
|	| -- uwsgi_params.default
|	| -- win-utf
| -- fastcgi_temp					# fastcgi 临时数据目录
| -- html							# 这是编译安装时 Nginx 的默认站点目录, 前面已说明,类似Apache的默认站 htdocs目录
|	| --  50x.html					# 错误页面优雅替代显示文件,例如:出现502错误时会调用此页面
|									# error_page 500 502 503 504 /50x.html;
|	| -- index.html					# 默认的首页文件, 在实际环境中,大家习惯用(注意不是必须)index.html、 index.php, |										index.jsp 来做网站的首页件。
| -- logs							# 这是 Nginx 默认的日志路径, 包括错误日志及访问曰志
| 	| -- access.log					# 这是 Nginx 的默认访问曰志文件, 使用 tail -f 可以实时观看网站用户访问情况信息
| 	| -- error.log					# 这是 Nginx 的错误日志文件, 如果 Nginx 出现启动故障等问题 ,查看错误日志
| 	| -- nginx.pid					# Nginx 的 pid 文件, Nginx 进程启动后, 会把所有进程的ID号写到此文件
| -- proxy_temp						# 临时目录
| -- sbin							# 这是 Nginx 命令的目录, 如 Nginx 的启动命令 nginx
| 	| -- nginx						# Nginx 的启动命令 nginx
| -- scgi_temp						# 临时目录
| -- uwscgi_temp					# 临时目录
9 directories, 21 files

1.5 配置文件说明

[root@RHEL-9 conf]# cat nginx.conf
worker_processes  1;               ← worker 进程数量
events {                           ←事件区块
    worker_connections  1024;      ←每个worker进程可以处理的连接数
}                                  ←事件区块结束
http {                                      ← HTTP 区块
    include       mime.types;               ←支持的媒体文件
    default_type  application/octet-stream; ←默认的媒体类型
    sendfile        on;                     ←高效传输模式
    keepalive_timeout  65;                  ←超时时间
    server {                                ← server 区块
        listen       80;                    ←端口
        server_name  localhost;             ←域名
        location / {                        ←第一个location区块
            root   html;                     ←站点目录
            index  index.html index.htm;     ←首页文件
        }                                    ←第一个location区块结束
        error_page   500 502 503 504  /50x.html;  ← 错误信息配置
        location = /50x.html {                  文件位置
            root   html;                        在哪找:路径
        }                                     
    }                                        ← server 区块结束
}                                            ← HTTP 区块结束

2 nginx-web应用

2.1 定义进程数以及进程绑定

worker_processes 与 worker_cpu_affinity

worker_processes [number | auto]; #启动Nginx工作进程的数量,一般设为和CPU核心数相同
worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ;

# 将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,
# 绑定并不是意味着当前nginx进程独占以一核心CPU,但是可以保证此进程不运行在其他核心上,
# 这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,
# 减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。


CPU MASK: 00000001:0号CPU
00000010:1号CPU
10000000:7号CPU

#示例
worker_cpu_affinity 0001 0010 0100 1000;第0号---第3号CPU
worker_cpu_affinity 0101 1010;

2.2 定义进程优先级与文件打开上限

worker_priority 与 worker_rlimit_nofile

worker_priority 0; #工作进程优先级,-20~20(19)
worker_rlimit_nofile 65536; #所有worker进程能打开的文件数量上限,
#包括:Nginx的所有连接(例如与代理服务器的连接等)
#而不仅仅是与客户端的连接
#另一个考虑因素是实际的并发连接数不能超过系统级别的最大打开文件数的限制
#最好与ulimit -n 或者limits.conf的值保持一致,

2.3 events块

events {
    worker_connections 65535; #设置单个工作进程的最大并发连接数
    use epoll; #使用epoll事件驱动,
                #Nginx支持众多的事件驱动,
                #比如:select、poll、epoll,只能设置在events模块中设置
    accept_mutex on; #on为同一时刻一个请求轮流由work进程处理,
                    #而防止被同时唤醒所有worker
                    #避免多个睡眠进程被唤醒的设置,默认为off
                    #新请求会唤醒所有worker进程,此过程也称为"惊群"
                    #因此nginx刚安装完以后要进行适当的优化。建议设置为on
    multi_accept on; #on时Nginx服务器的每个工作进程可以同时接受多个新的网络连接
                    #此指令默认为off,
                    #即默认为一个工作进程只能一次接受一个新的网络连接
                    #打开后几个同接受多个。建议设置为on
}

2.4 实现 nginx 的高并发配置

使用ab命令来对NGINX进行压力测试

2.4.1 文件描述符限制

文件描述符是用来标识打开文件的整数标识符。在Linux系统中,每个进程都有一个文件描述符表,用于跟踪进程打开的所有文件、套接字等资源。当进程达到其文件描述符的最大限制时,就无法再打开更多的文件或建立更多的网络连接,这可能会导致服务中断或性能下降。

2.4.2 为什么需要调整文件描述符限制

对于像NGINX这样的Web服务器,特别是在高并发环境下,可能需要同时处理大量的客户端连接。每个连接都会占用一个或多个文件描述符。因此,如果默认的文件描述符限制较低,NGINX可能会在高负载下达到限制,从而无法处理更多的连接请求。

2.4.3 临时调整

ulimit -n 100000

2.4.4 永久调整

[root@RHEL-9 ~]# vim /etc/security/limits.conf 
nginx            -      nofile          10000000

[root@RHEL-9 ~]# sudo -u nginx ulimit -n
100000
[root@RHEL-9 ~]# sudo -u nginx ulimit -a
real-time non-blocking time  (microseconds, -R) unlimited
core file size              (blocks, -c) 0
data seg size               (kbytes, -d) unlimited
scheduling priority                 (-e) 0
file size                   (blocks, -f) unlimited
pending signals                     (-i) 6723
max locked memory           (kbytes, -l) 64
max memory size             (kbytes, -m) unlimited
open files                          (-n) 100000
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) 6723
virtual memory              (kbytes, -v) unlimited
file locks                          (-x) unlimited

开放最大并发数为10000000

[root@RHEL-9 ~]# vim /usr/local/nginx/conf/nginx.conf
[root@RHEL-9 ~]# systemctl restart nginx

2.5 http 配置块

#在响应报文中将指定的文件扩展名映射至MIME对应的类型
include /etc/nginx/mime.types;
default_type application/octet-stream; #除mime.types中的类型外
#指定其它文件的默认MIME类型,浏览
器一般会提示下载
types {
        text/html html;
        image/gif gif;
        image/jpeg jpg;
}

创建子配置文件夹

3 核心配置示例

虚拟主机

基于不同的IP、不同的端口以及不用得域名实现不同的虚拟主机,依赖于核心模块

ngx_http_core_module实现。

新建一个 PC web 站点

root 与 alias

root :指定 web 的家目录,在定义 location 的时候,文件的绝对路径等于 root+location
alias :定义路径别名,会把访问的路径重新定义到其指定的路径 , 文档映射的另一种机制 ; 仅能用于
location 上下文 , 此指令使用较少

root #给定的路径对应于location中的/uri左侧的/

alias #给定的路径对应于location中的/uri的完整路径

[root@RHEL-9 ~]# mkdir -p /data/web
[root@RHEL-9 ~]# echo this is  `hostname -I` > /data/web/index.html
[root@RHEL-9 ~]# vim /usr/local/nginx/conf/nginx.conf
server {

        listen 80;
        server_name www.shuyan.com;
        index index.html;
        location / {
                root /data/web;

        }
        
        location /html {
                root /data/web;
        }
        
        location /web {
                alias /data/web/html;
        }


}

[root@RHEL-9 ~]# vim /usr/local/nginx/conf.d/vhost.conf 
[root@RHEL-9 ~]# systemctl reload nginx
[root@RHEL-9 ~]# mkdir /data/web/html
[root@RHEL-9 ~]# echo this is alias > /data/web/html/index.html

[root@RHEL-9 ~]# curl 192.168.239.20
this is 192.168.239.20

[root@RHEL-9 ~]# curl 192.168.239.20/web/
this is alias

[root@RHEL-9 ~]# curl 192.168.239.20/html/
this is alias

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

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

相关文章

1. 数据结构——顺序表的主要操作

1. 内容 顺序表的初始化、插入、删除、按值查找、输出以及其时间复杂度的计算。 2.代码 #include<stdio.h> #include<stdlib.h> //函数结果状态代码 #define OK 1 #define OVERFLOW -2 #define ERROR 0 #define MAXSIZE 100typedef int ElemType; //顺序表每个…

Vue.js入门系列(九):表单数据处理、过滤器及常用指令

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

Linux环境开发工具【yum与vim】

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 文章目录 1.Linux软件包管理器yum1.1 快速使用yum 2. Linux编辑器-vim的使用2.1 vim的基本…

机器学习——XGBoost

目录 一、初识XGBoost 1. 介绍 2. 使用 XGBoost 的方法 &#xff08;1&#xff09;直接使用xgboost库自己的建模流程 &#xff08;2&#xff09;使用xgboost库中的sklearn的API 3. XGBoost的三大板块 4. 提升集成算法 5. 建模流程 二、模型常用参数 1. n_estimators …

Leetcode每日刷题之611.有效三角形的个数(C++)

1. 思路解析 根据题意我们可知&#xff0c;我们需要在指定数组中找出任意三个数并判断是否可以组成一个三角形&#xff0c;即任意两数之和大于第三个数&#xff0c;任意两数之差小于第三个数&#xff0c;如果有数组元素相同的数组&#xff0c;由于取出的元素只是数值相同而实际…

Final Cut Pro Mac(fcpx专业视频剪辑软件) 10.8 中文版安装

Final Cut Pro 是苹果公司为专业视频编辑人士量身打造的非线性编辑软件&#xff0c;以其卓越的性能和深度定制的工具集&#xff0c;在影视制作、电视广播、广告创意等多个领域占据了重要地位。凭借其对高分辨率视频的无缝支持和实时剪辑的流畅体验&#xff0c;Final Cut Pro 成…

3.3 关系模型与关系代数

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

链表专题.

Leetcode 160. 相交链表 解题思路&#xff1a; 代码实现&#xff1a;时间复杂度O(nm) 空间复杂度O(1) 我的实现方式 class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode* pa headA, *pb headB;bool f1 false, f2 fals…

数学建模预测类—【多元线性回归】

每日名言&#xff1a;成名每在穷苦日&#xff0c;败事多因得意时 目录 文章目录 前言 二、参数估计 三、多元线性回归模型和回归系数的检验 四、预测 总结 前言 本文将根据回归建模过程来讲解多元线性回归模型&#xff0c;有关回归分析的知识以及一元线性回归的内容可以戳…

[C++][opencv]基于opencv实现photoshop算法图像旋转

【测试环境】 vs2019 opencv4.8.0 【效果演示】 【核心实现代码】 //图像旋转: src为原图像&#xff0c; dst为新图像, angle为旋转角度, isClip表示是采取缩小图片的方式 int imageRotate4(InputArray src, OutputArray dst, double angle, bool isClip) {Mat input src.…

大模型应用开发基础知识

一、LangChain介绍 背景 一个应用程序通常需要多次对大语言模型写提示并对它输出的结果进行解析。因此&#xff0c;需要写很多胶水代码。而LangChain的目的使这个开发过程变得更容易。目的 LangChain是一个构建大语言模型应用的开源框架。当有人在开发LLM的复杂应用&#xff0…

ModuleNotFoundError: No module named ‘transformers_modules.chatglm-6b-v1‘

ModuleNotFoundError: No module named transformers_modules.chatglm-6b-v1 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;…

基于Java语言的充电桩平台 包含(充电桩系统 汽车充电桩云快充协议 电动自行车充电桩协议 中电联充电桩互联互通协议)

介绍 SpringBoot 框架&#xff0c;充电桩平台充电桩系统充电平台充电桩互联互通协议云快充协议1.5-1.6协议新能源汽车二轮车公交车二轮车充电-四轮车充电充电源代码充电平台源码Java源码 软件架构 软件架构说明 软件功能 小程序端&#xff1a;城市切换、附近电站、电桩详情…

【RAG实战】基于TextIn打造上市公司财务报表智能问答系统

今天介绍一个项目案例,利用大语言模型打造上市公司财务报表智能问答系统。 在当今竞争激烈的市场环境中,企业和投资者对财务信息的获取与分析要求越来越高。上市公司财务报表作为评估公司财务健康和未来发展的重要依据,提供了大量关键信息。 然而,传统的财务报表分析技术…

尚品汇-前端调用搜索实现(三十二)

目录&#xff1a; &#xff08;1&#xff09;修改web-all模块 &#xff08;2&#xff09;配置网关 &#xff08;3&#xff09;页面渲染 &#xff08;4&#xff09;面包屑处理 &#xff08;1&#xff09;修改web-all模块 修改pom.xml文件 <dependencies><depende…

QT串口通信

查看详情http://100bcw.com/qt6.htm 前言&#xff1a;如果用qt写程序作为上位机&#xff0c;然后通过和usb和下位机通信的时候&#xff0c;就需要用到qt中的串口通信了。 使用qt中的串口通信的时候需要用到的两个头文件分别为&#xff1a; #include <QtSerialPort/QSeria…

MYSQL----表的创建

1.创建表 create table 表名&#xff08; field1 datetype, field2 datetype, field3 datetype &#xff09; 1.field字段名&#xff0c;也就是属性&#xff0c;相当于java类里面的成员属性 2.datetype 数据类型 3.最后一个字段的定义&#xff0c;结束没有逗号 4.字段的定义在…

政策驱动,科技引领,漫途信息化监测方案守护农村饮水安全!

近日&#xff0c;山西省人民政府正式发布《山西省农村供水高质量发展规划》&#xff0c;明确到2030年&#xff0c;全面实现农村24小时供水&#xff0c;县域农村饮水安全标准化建设达标率力争达到80%&#xff0c;基本实现农村供水城市化、城乡供水均等化。 现阶段部分地区受…

基于VS2022+Qt5+C++的串口助手开发

目录 一、前言 二、环境准备 三、创建QT串口项目 ​编辑 四、串口项目实现 1.ui界面设计 2.添加QT串口模块 3.功能实现 ①串口扫描 ②波特率、停止位等设置 ③接收数据 ④发送数据 五、最终效果 六、总结 一、前言 如果有人之前看过我文章的话应该知道&#xf…

C# 窗体通过调用webapi往U9C系统创建请购单

C# 窗体通过调用webapi往U9C系统创建请购单 窗体图片 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System…