linux笔记(nginx)

一、Nginx 概念

Nginx 是一款轻量级的高性能 Web 服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。它可以在大多数 Unix/Linux 操作系统上运行,也有 Windows 版本。主要用于处理高并发连接,能够快速、高效地为用户提供静态和动态内容。

二、特点

  1. 高并发性能
    • 采用事件驱动的异步非阻塞模型,能够轻松处理数以万计的并发连接,大大提高服务器的资源利用率和处理能力。
    • 相比传统的服务器架构,在相同硬件条件下可以支持更多的并发请求。
  2. 内存占用少
    • 代码设计高效,对系统资源的消耗很低,在处理大量请求时,其内存占用远低于其他同类服务器软件。
  3. 稳定性高
    • 具有良好的稳定性,在长期运行过程中不容易出现崩溃等问题,可以持续为用户提供可靠的服务。
  4. 功能丰富
    • 除了作为 Web 服务器和反向代理服务器外,还可以实现负载均衡、缓存等多种功能,满足复杂网络架构的需求。
三、架构

  1. Master 进程
    • 负责读取配置文件,创建和管理 worker 进程等。它是整个 Nginx 服务器的控制中心,监控 worker 进程的运行状态。
  2. Worker 进程
    • 实际处理网络请求的进程。多个 worker 进程相互独立工作,接收来自客户端的连接,进行请求处理和响应返回。这种多进程架构可以充分利用多核 CPU 的优势,提高处理效率。
四、关键工作机制

  1. 事件驱动模型
    • Nginx 使用事件驱动的异步非阻塞模型。例如,当有新的网络连接请求时,Nginx 不会阻塞等待这个请求处理完成,而是继续监听其他连接请求。当连接上有数据可读或可写时,相应的事件被触发,然后由相应的模块进行处理。
  2. 模块体系
    • Nginx 由一系列模块组成,包括核心模块、事件模块、HTTP 模块、mail 模块等。每个模块负责特定的功能,比如 HTTP 模块处理 HTTP 请求和响应,通过模块的组合实现丰富的功能。
五、正向代理和反向代理

  1. 正向代理
    • 客户端知道代理服务器的存在,并主动配置使用代理服务器来访问目标服务器。代理服务器代替客户端向目标服务器发起请求,对于目标服务器来说,它只知道请求来自代理服务器,而不知道真正的客户端。例如,在企业内部网络中,员工通过代理服务器访问外部网站,以实现访问控制和提高访问效率等目的。
  2. 反向代理
    • 客户端并不知道代理服务器的存在,客户端向目标服务器发送请求时请求会先被反向代理服务器接收。反向代理服务器根据配置将请求转发到后端真正的服务器进行处理,然后将处理结果返回给客户端。对于客户端来说,它只知道自己在与目标服务器通信,而不知道后端有多个服务器。比如,在大型网站架构中,使用反向代理服务器可以实现负载均衡和隐藏后端服务器的真实架构。

 

 六、nginx主配置文件分析

 

 

1.全局块(main)
  • 配置指令:通常位于配置文件的开头部分。例如 user nobody;worker_processes auto; 等。
  • 功能说明
    • user 指令:指定 Nginx 工作进程运行的用户和用户组。合理设置用户可以增强系统安全性,防止 Nginx 进程因权限过高带来潜在风险。例如,如果设置为 nobody 用户,Nginx 将以较低权限运行,限制了其对系统资源的不当访问。
    • worker_processes 指令:确定 Nginx 工作进程的数量。设置为 auto 时,Nginx 会自动根据 CPU 核心数来确定合适的工作进程数量。增加工作进程数量可以提高 Nginx 的并发处理能力,但过多的进程也可能导致资源竞争。
    • error_log 指令:定义错误日志的路径和日志级别。例如 error_log /var/log/nginx/error.log; 会将错误信息记录到指定路径下的文件中。日志级别可以是 debuginfowarnerror 等,不同级别决定了记录错误信息的详细程度。较低的日志级别(如 debug)会记录更多的信息,有助于排查复杂问题,但会占用更多的磁盘空间。
2. events 块
  • 配置指令:例如 events { use epoll; worker_connections 1024; }
  • 功能说明
    • use 指令:指定 Nginx 使用的事件驱动模型。在 Linux 系统中,常用的是 epoll,它是一种高效的 I/O 多路复用机制。这种机制允许 Nginx 在单个线程内同时处理多个连接的 I/O 事件,提高了服务器的并发处理能力。
    • worker_connections 指令:定义每个 worker 进程可以同时处理的最大连接数。这里设置为 1024 只是一个示例值,实际应用中可根据服务器硬件资源和预期的并发量进行调整。合理设置此值可以充分利用服务器资源,同时避免因连接数过多导致系统崩溃。
3. http 块
  • 配置指令:这是 Nginx 配置中内容最丰富的部分,包含了多个子块和指令,如 serverlocationupstream 等。
  • 功能说明
    • server 子块:用于定义虚拟服务器。一个 Nginx 可以配置多个虚拟服务器,每个虚拟服务器可以对应不同的域名或 IP 地址。例如:
server {listen       80;server_name  example.com;root         /var/www/html;location / {try_files $uri $uri/ =404;}
}

  • listen 指令:指定服务器监听的端口号,这里是 80,表示监听 HTTP 协议的默认端口。

  • server_name 指令:设置服务器的域名或 IP 地址,这里是 example.com。当客户端请求的域名与 server_name 匹配时,Nginx 会将请求路由到这个虚拟服务器进行处理。

  • root 指令:定义服务器的根目录,即服务器查找文件的起始目录。这里设置为 /var/www/html,当客户端请求一个 URL 时,Nginx 会在这个目录下查找相应的文件。

  • location 子块:用于对特定的 URL 路径进行配置。在这个例子中,location / 表示对所有请求路径进行处理。try_files 指令尝试按照顺序查找文件,如果找不到则返回 404 错误。

  • upstream 子块:主要用于实现后端服务器的负载均衡。例如:

upstream backend_pool {server backend1.example.com;server backend2.example.com weight=2;
}

这里定义了一个名为 backend_pool 的后端服务器组,其中包含两个后端服务器。weight 参数可以设置服务器的权重,权重越高的服务器被分配到请求的概率越大。在这个例子中,backend2.example.com 的权重为 2,意味着它比 backend1.example.com 更有可能接收到请求。

  • include 指令:可以在 http 块中使用,用于引入其他配置文件。例如 include /etc/nginx/conf.d/*.conf; 会将指定目录下所有以 .conf 结尾的文件内容包含到当前配置中,这种方式可以方便地对配置进行模块化管理。

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

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

相关文章

103 - Lecture 1

Introduction to Database 一、Introduction to Database Systems 1. 数据的定义 What is Data? EX: data could be a docx file storing your project status report; data could be a spreadsheet containing information • 数据只有在设计的场景中才有意义。&#xff…

微信公众号绑定设计-WeChat public platform bing and send message

一 WeChat bind ui 二、message style 三、 consume style 四、send log 五、temp setting

基于Python的乡村居民信息管理系统【附源码】

基于Python的乡村居民信息管理系统 效果如下: 系统主页面 系统登录页面 管理员主页面 居民管理页面 政务学习页面 土地信息管理页面 个人信息管理页面 居民登陆页面 村委人员主页面 研究背景 随着信息技术的飞速发展和乡村振兴战略的深入实施,传统的乡…

MySql中索引为什么用B+树,他有什么特点?时间复杂度是多少?能存多少数据?是不是只能三层?他与B-树有什么不同?还有其它的树你是是否知道?

平衡二叉树 平衡二叉树又被称为AVL树平衡二叉树是一颗空树或者它的左右两个子树的高度差的绝对值不超过1,并且左右子树也是平衡树非叶子节点值大于左子节点值而小于右子节点值非叶子节点最多拥有两个子节点 平衡二叉树的不足之处及时间复杂度 如果每次插入的数据都…

【初阶数据结构篇】链式结构二叉树(续)

文章目录 须知 💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗&#xff1…

VMWARE ESXI VMFS阵列故障 服务器数据恢复

1:河南用户一台DELL R740 3块2.4T硬盘组的RAID5,早期坏了一个盘没有及时更换,这次又坏了一个,导致整组RAID5处于数据丢失的状态, 2:该服务器装的是VMware ESXI 6.7,用户把3块硬盘寄过来进行数据…

使用docker安装zlmediakit服务(zlm)

zlmediakit安装 zlmediakit安装需要依赖环境和系统配置,所以采用docker的方式来安装不容易出错。 docker pull拉取镜像(最新) docker pull zlmediakit/zlmediakit:master然后先运行起来 sudo docker run -d -p 1935:1935 -p 80:80 -p 8554:554 -p 10000:10000 -p …

uni-app跨域set-cookie

set-cookie的值是作为一个权限控制的 首先,无论什么接口都会返回一个set-cookie,但未登录时,set-cookie是没有任何权限的 其次,登录接口请求时会修改set-cookie,并且在后续其他接口发起请求时,会在请求头…

【论文速读】| PathSeeker:使用基于强化学习的越狱攻击方法探索大语言模型的安全漏洞

基本信息 原文标题: PathSeeker: Exploring LLM Security Vulnerabilities with a Reinforcement Learning-Based Jailbreak Approach 原文作者: Zhihao Lin, Wei Ma, Mingyi Zhou, Yanjie Zhao, Haoyu Wang, Yang Liu, Jun Wang, Li Li 作者单位: Beihang University, Nany…

黑马官网2024最新前端就业课V8.5笔记---HTML篇

Html 定义 HTML 超文本标记语言——HyperText Markup Language。 标签语法 标签成对出现&#xff0c;中间包裹内容<>里面放英文字母&#xff08;标签名&#xff09;结束标签比开始标签多 /拓展 &#xff1a; 双标签&#xff1a;成对出现的标签 单标签&#xff1a;只有开…

NXP Zigbee JN5169 开发环境软件 文档和支持资源打包下载

NXP Zigbe JN5169软件、文档和支持资源下载 从NXP官网下载https://www.nxp.com.cn/pages/jn516x-7x-zigbee-3-0:ZIGBEE-3-0&#xff0c;有点蛋疼网站&#xff0c;要注册会员&#xff0c;所以我打包好所有NXP Zigbe JN5169所需的 软件、文档和支持资源打包好&#xff0c;以供开…

基于matlab的语音识别系统

一&#xff0e;设计任务及要求 1.1设计任务 作为智能计算机研究的主导方向和人机语音通信的关键技术&#xff0c;语音识别技 术一直受到各国科学界的广泛关注。以语音识别开发出的产品应用领域非常广泛&#xff0c;有声控电话交换、语音拨号系统、信息网络查询、家庭服务、宾馆…

使用WebStorm开发Vue3项目

记录一下使用WebStorm开发Vu3项目时的配置 现在WebStorm可以个人免费使用啦&#xff01;&#x1f929; 基本配置 打包工具&#xff1a;Vite 前端框架&#xff1a;ElementPlus 开发语言&#xff1a;Vue3、TypeScript、Sass 代码检查&#xff1a;ESLint、Prettier IDE&#xf…

Ansys HFSS:外壳的屏蔽效果演示

欢迎回来&#xff01;随着电子系统变得越来越复杂和集成&#xff0c;确保适当的屏蔽以减轻电磁干扰 &#xff08;EMI&#xff09; 变得越来越重要。 继续讨论屏蔽效果&#xff0c;我们现在将重点转移到另一个强大的工具上&#xff1a;Ansys HFSS&#xff08;高频结构仿真器&am…

Python基于TensorFlow实现双向循环神经网络GRU加注意力机制分类模型(BiGRU-Attention分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着深度学习技术的发展&#xff0c;循环神经网络&#xff08;RNN&#xff09;及其变种如门控循环…

【C++】C++的单例模式

二十四、C的单例模式 1、C的单例模式 本小标题不是讨论C的语言特性&#xff0c;而是一种设计模式&#xff0c;用于确保一个类在任何情况下都只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。即C的单例模式。这种模式常用于资源管理&#xff0c;如‌线程池、‌缓…

单元测试(Junit)

系统—模块—子模块&#xff0c;子模块中不可分割的程序单元的测试&#xff0c;单元的粒度根据实际情况可能是 类或方法等。 面向对象编程中&#xff0c;最小单元就是方法。 单元测试目的是在集成测试和功能测试之前对系统可测试单元进行逐一检查和验证。 单元测试基本原则 …

这个自动化框架吧,解决接口间数据依赖

在实际的测试工作中&#xff0c;在做接口自动化测试时往往会遇到接口间数据依赖问题&#xff0c;即API_03的请求参数来源于API_02的响应数据&#xff0c;API_02的请求参数又来源于API_01的响应数据。 因此通过自动化方式测试API_03接口时&#xff0c;需要预先请求API_02接口&a…

JeecgBoot入门

最近在了解低代码平台&#xff0c;其中关注到gitee上开源项目JeecgBoot&#xff0c;JeecgBoot官方也有比较完整的入门教学文档&#xff0c;这里我们将耕者官方教程学习&#xff0c;并将其记录下来。 一、项目简介 JeecgBoot 是一款基于代码生成器的低代码开发平台拥有零代码能力…

修改HarmonyOS鸿蒙图标和名字,打包后安装到真机,应用图标丢失变成透明,修改名字也不生效,还是默认的labeL解决方案教程

HarmonyOS鸿蒙打包hap 安装应用到桌面没有图标&#xff0c;用hdc安装到真机&#xff0c;打包后应用图标丢失变成透明&#xff0c;名字也还是默认的label的bug&#xff0c;以下是解决方案 以下是修改方案&#xff1a; 1、修改应用名字&#xff1a; 2、修改应用图标&#xff1a…