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刚安装完以后要进行适当的优化。建议设置为onmulti_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.rhkb.cn/news/402215.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解锁冻结的 iPhone 和 iPad 的具体教程

许多苹果用户选择 iDevices 主要是因为他们认为苹果产品更稳定&#xff0c;使用效果也更好。然而&#xff0c;一些苹果用户报告说他们的 iPhone 或 iPad 屏幕没有响应。换句话说&#xff0c;他们的 iOS 设备被冻结了。如果你想解决这样的故障并恢复 iOS 数据&#xff0c;你可以…

挺进大别山(一)

大别山坐落于安徽省、湖北省、河南省交界处&#xff0c;是长江与淮河的分水岭。8月3日&#xff0c;我们早上8点&#xff0c;从马村出发&#xff0c;穿越郑州--许昌--周口--驻马店--信阳&#xff0c;日行5百多公里&#xff0c;到了安徽进入了大别山。近距离的领略了它的魅力。 雨…

Cesium模型制作,解决Cesium加载glb/GLTF显示太黑不在中心等问题

Cesium模型制作&#xff0c;解决Cesium加载glb/GLTF显示太黑不在中心等问题 QQ可以联系这里&#xff0c;谢谢

鸿蒙环境和模拟器安装

下载华为开发者工具套件&#xff0c;并解压 https://developer.harmonyos.com/deveco-developer-suite/enabling/kit?currentPage1&pageSize10 双击dmg安装ide 复制并解压sdk 安装模拟器 https://yuque.antfin-inc.com/ainan.lsd/cm586u/po19k1mi9b2728da?singleDoc#…

算法【Java】—— 双指针算法

双指针算法 常见的双指针有对撞指针&#xff0c;快慢指针以及前后指针&#xff08;这个前后指针是指两个指针都是从从一个方向出发&#xff0c;去往另一个方法&#xff0c;也可以认为是小学学习过的两车并行&#xff0c;我也会叫做同向指针&#xff09;&#xff0c;在前后指针…

使用VNC-viewer对树莓派5 远程连接桌面—详细记录笔记版

树莓派5 的远程桌面连接&#x1f680; 在完成了对树莓派镜像的安装&#xff0c;以及点亮了屏幕之后&#xff0c;接下来就是为开发做一些准备&#xff0c;就是配置树莓派5的远程的桌面的操作&#xff0c;因为如果不这样的话&#xff0c;我在PC上和树莓派系统上分别进行作业的时候…

CSS 布局

CSS 页面布局技术允许我们拾取网页中的元素&#xff0c;并且控制它们相对正常布局流、周边元素、父容器或者主视口/窗口的位置。布局有一下几种 正常布局流display属性弹性盒子网格浮动定位CSS 表格布局多列布局 每种布局都有它们的用途&#xff0c;各有优缺点&#xff0c;相…

实时监控Windows服务器:使用Prometheus和Grafana的终极方案

1. 下载并安装 Prometheus 下载 Prometheus&#xff1a; 访问 Prometheus 下载页面。下载适用于 Windows 的压缩包&#xff08;.zip 文件&#xff09;。prometheus-2.53.2.windows-amd64.zip 下载其中一个就行 安装 Prometheus&#xff1a; 解压下载的压缩包到你选择的目录&a…

Centos7主机带宽限速

需求&#xff1a;最近有两个主机经常把带宽打满。咨询了阿里云无法对内网网卡做限制。这边想使用linux默认的TC工具。 限速之前测试带宽。这时带宽有 168.4MB/s。 ]# scp filebeat-8.8.2-x86_64.rpm 172.116.47.54:/root/100% 26MB 168.4MB/s 00:00 1. 限制出站&#xff0…

Python编码系列—掌握Python Web开发:Flask与FastAPI实战应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

ubuntu 24.04 安装 Nvidia 显卡驱动 + CUDA + cuDNN,配置 AI 深度学习训练环境,简单易懂,一看就会!

ubuntu 24.04 安装 Nvidia 显卡驱动 CUDA cuDNN&#xff0c;配置 AI 深度学习训练环境&#xff0c;简单易懂&#xff0c;一看就会&#xff01; 1.查看本机显卡型号 lspci | grep -i nvidia输出如下&#xff1a; 01:00.0 3D controller: NVIDIA Corporation GM108M [GeForc…

C语言常用的内存函数

在上一篇博客中我为大家分享了一些常用的字符串函数&#xff0c;以及它们的用法和模拟实现。通过字符串函数中的strcpy&#xff0c;我们能够做到将一个字符串中的内容拷贝到另一个字符串上&#xff0c;可如果有一天我们想把一个整型数组中的内容拷贝到另一个整型数组中呢&#…

KV存储之ETCD

ETCD 是一种分布式键值存储系统&#xff0c;主要用于分布式系统中的配置管理、服务发现和分布式协调。它由 CoreOS 团队开发&#xff0c;现在是 CNCF&#xff08;云原生计算基金会&#xff09;托管的一个开源项目。ETCD 在设计时非常注重一致性、可用性和性能&#xff0c;通常被…

Eclipse的使用配置教程:必要设置、创建工程及可能遇到的问题(很详细,很全面,能解决90%的问题)

Eclipse的使用配置&#xff1a; Ⅰ、Eclipse 的必要配置&#xff1a;1、Eclipse 的安装&#xff1a;其一、将 Eclipse 解压或安装到没有中文且没有空格的路径下。其二、拿到 eclipse.exe 文件&#xff0c;傻瓜式安装即可; 2、设置工作空间(workspace)&#xff1a;其一、首次启动…

C程序设计——基本变量类型(指针杂谈)

瞎聊 本文后面的内容&#xff0c;可以暂时看不懂&#xff0c;以后如果从事这一行&#xff0c;慢慢会理解&#xff0c;但是这句话要记住&#xff1a;如果 piInt 是一个指向整型的指针变量&#xff0c;那么 *piInt 就是一个整型变量&#xff1b;类似的&#xff0c;如果pcChar是…

原生微信小程序笔记完整总结4.0

&#x1f939;‍♀️潜意识起点&#xff1a;个人主页 &#x1f399;座右铭&#xff1a;得之坦然&#xff0c;失之淡然。 &#x1f48e;擅长领域&#xff1a;大前端 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我…

【MySQL】事务管理

【MySQL】事务管理 什么是事务为什么要有事务事务的版本支持事务的提交方式事务的常见操作事务的隔离级别如何理解隔离性隔离级别隔离级别的设置与查看读未提交【Read Uncommitted】读提交【Read Committed】可重复读【Repeatable Read】串行化【serializable】一致性(Consiste…

代码随想录算法训练营43期 | Day 14——226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、二叉树最小深度

代码随想录算法训练营 226.翻转二叉树101. 对称二叉树递归法 104.二叉树的最大深度二叉树最小深度 226.翻转二叉树 leetcode链接 思路&#xff1a; 递归三部曲&#xff1a; 确定递归函数的参数和返回值确定终止条件确定单层递归的逻辑 递归法 TreeNode* invertTreeNode(Tree…

并发系统的 CSP+PAT 形式化建模与验证方法(以Kafka系统为例)

消息队列中间件是分布式系统的重要组成部分。它允许应用程序仅关注数据本身&#xff0c;而无需关心数据传输的具体细节。这一特性有效解决了消息异步传输、应用程序解耦以及流量削峰等问题。Kafka是一个开源的分布式消息系统&#xff0c;它基于发布-订阅模型构建。Kafka具有低延…

Unity使用代码生成ScriptableObject数据并赋值之后,重启数据就没有啦!

2024年8月14日早&#xff0c;因数据持续化存储&#xff0c;重启电脑后数据会丢失&#xff0c;而我找不到原因被领导质疑了&#xff0c;故写一片博客记录这个错误。 省流 使用在编辑器的play模式中为ScriptableObject赋值之后&#xff0c;需要使用 #if UNITY_EDITORUnityEdit…