Nginx 核心配置详解

 章节

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Python编写AI程序,让机器变得更智能

人工智能&#xff08;AI&#xff09;是当今科技领域最热门的话题之一。随着Python编程语言的逐渐流行&#xff0c;它已经成为许多人工智能编程的首选语言。本文将介绍如何使用Python编写AI程序&#xff0c;让机器变得更智能。 首先&#xff0c;Python提供了大量的AI库和工具&a…

10、stm32实现adc读取数据

一、配置 二、代码 /* USER CODE BEGIN 2 */OLED_Init();OLED_Clear();OLED_ShowString(0,0,"Hello adc",12,0);uint16_t adc_number 0;/* USER CODE END 2 *//* USER CODE BEGIN WHILE */while (1){HAL_ADC_Start(&hadc1);HAL_ADC_PollForConversion(&hadc1…

SQL实战

学习视频&#xff1a;【课程2.0】SQL从入门到实战|云端数据库搭建|Excel&Tableau连接数据库_哔哩哔哩_bilibili 由于我学习过SQL&#xff0c;所以直接记录一些函数、特殊用法、刷题等实战的知识&#xff0c;后面教学搭建云端数据库和其他软件连接数据库视频讲解很清晰&…

华为AR1220配置GRE隧道

1.GRE隧道的配置 GRE隧道的配置过程,包括设置接口IP地址、配置GRE隧道接口和参数、配置静态路由以及测试隧道连通性。GRE隧道作为一种标准协议,支持多协议传输,但不提供加密,并且可能导致CPU资源消耗大和调试复杂等问题。本文采用华为AR1220路由器来示例说明。 配置…

C语言家教记录(六)

导语 本次授课的内容如下&#xff1a;指针&#xff0c;指针和数组 辅助教材为 《C语言程序设计现代方法&#xff08;第2版&#xff09;》 指针 指针变量 计算机按字节划分地址&#xff0c;每个地址访问一个字节 指针变量指向变量的地址&#xff0c;指的是变量第一个字节的…

ElasticSearch读写性能调优

文章目录 ES写入数据过程ES读取数据的过程写数据底层原理提升集群读取性能数据建模优化分片 提升写入性能的方法服务器端优化写入性能建模时的优化降低Translog写磁盘的频率&#xff0c;但是会降低容灾能力分片设定调整Bulk 线程池和队列 ES写入数据过程 客户端选择一个node发…

记录一次搭建uniapp-vue3的基础项目

1.使用 HBuilder X 创建uniapp vue3的基础项目 2.安装 自动导包插件 unplugin-auto-import npm install unplugin-auto-import或者 pnpm install unplugin-auto-import2.1 根目录下创建 vite.config.js 复制粘贴以下内容 import { defineConfig } from vite import uni fro…

食品零食小吃商城管理系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

一文学会本地部署可视化应用JSONCrack并配置公网地址实现远程协作

文章目录 前言1. Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 前言 本文主要介绍如何在Linux环境使用Docker安装数据可视化工具JSONCrack&#xff0c;并结合cpolar内网穿透工具实现团队在…

网络编程/在哪些场景中不必要进行网络字节序装换? Windows Sockets: Byte Ordering

文章目录 概述字节序必须转换字节序的的情况不必转换字节序的的情况字节序转换的例程字节序转换函数字节序转换可以不生硬字节序和位序 概述 本文主要讲述了在哪些场景下必须要进行大小端字节序转换&#xff0c;在哪些场景下可以不用进行大小端字节序转换&#xff0c;IP和端口…

<数据集>安全帽和安全背心识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;22141张 标注数量(xml文件个数)&#xff1a;22141 标注数量(txt文件个数)&#xff1a;22141 标注类别数&#xff1a;3 标注类别名称&#xff1a;[helmet, vest, head] 序号类别名称图片数框数1helmet15937572402v…

程序员如何写PLC程序

PLC是可编程逻辑控制器的简称&#xff0c;常用的编程语言是IEC61131-3&#xff08;梯形图、结构化文本、指令表、功能块、顺序功能图&#xff09;和西门子的SCL。程序员常用的编程语言是JS、Java、Python、C/C、Go等。PLC广泛采用编程工具有codesys、博图等。程序员常用的编程工…

XSS DOM破坏实战案例

目录 案例一 思考 源码分析 查找问题 实现 案例二 查看源码 问题查找 实现 实验环境&#xff1a;DOM clobbering | Web Security Academy (portswigger.net) 案例一 里面是一篇篇的博客&#xff0c;点击进去里面是一些评论 思考 尝试一些常规的xss 没什么效果... 他将…

为什么穷大方

为什么有些人明明很穷&#xff0c;却非常的大方呢&#xff1f; 因为他们认知太低&#xff0c;根本不懂钱的重要性&#xff0c;总是想着及时享乐&#xff0c;所以一年到头也存不了什么钱。等到家人孩子需要用钱的时候&#xff0c;什么也拿不出来&#xff0c;还到处去求人。 而真…

【Qt】常用控件QCheckBox

常用控件QCheckBox QCheckBox表示复选按钮&#xff0c;可以允许选中多个。 QCheckBox继承自QAbstractButton 例子&#xff1a;获取复选按钮的取值 使用Qt Designer先大体进行设计 代码实现&#xff1a; #include "widget.h" #include "ui_widget.h"Widge…

Python爬虫——爬取某网站的视频

爬取视频 本次爬取&#xff0c;还是运用的是requests方法 首先进入此网站中&#xff0c;选取你想要爬取的视频&#xff0c;进入视频播放页面&#xff0c;按F12&#xff0c;将网络中的名称栏向上拉找到第一个并点击&#xff0c;可以在标头中&#xff0c;找到后续我们想要的一些…

不能使用乘除法、for、while、if、else、switch、case求1+2+3+...+n

求123...n_牛客题霸_牛客网 (nowcoder.com) 描述 求123...n&#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句&#xff08;A?B:C&#xff09;。 数据范围&#xff1a; 0<n≤2000<n≤200 进阶&#xff1a; 空间复杂度 O(1)O(…

MySQL:查询(万字超详细版)

&#x1f48e;所属专栏&#xff1a; MySQL &#x1f48e;1. 单表查询 &#x1f48e;1.1 全列查询和指定列查询 全列查询&#xff1a; select * from exam; 在实际开发中不要使用 * 来进行查询&#xff0c;因为数据库会很大&#xff0c;影响效率 指定列查询&#xff1a; se…

Redis未授权访问漏洞利用合集

一、基本信息 靶机&#xff1a;IP:192.168.100.40 攻击机&#xff1a;IP:192.168.100.60 二、漏洞 & 过程 Redis 未授权访问漏洞利用无口令远程登录靶机 靶机 cd redis-4.0.8/src./redis-server ../redis.conf 攻击机 ./redis-cli -h 192.168.100.40 Redis 未授权访问…

eNSP 华为ACL配置

华为ACL配置 需求&#xff1a; 公司保证财务部数据安全&#xff0c;禁止研发部门和互联网访问财务服务器&#xff0c;但总裁办不受影响 R1&#xff1a; <Huawei>sys [Huawei]sys Router1 [Router1]undo info-center enable [Router1]int g1/0/0 [Router1-GigabitEth…