深度解析Nginx:高性能Web服务器的奥秘(上)

🐇明明跟你说过:个人主页

🏅个人专栏:《洞察之眼:ELK监控与可视化》🏅

🔖行路有良友,便是天堂🔖

目录

一、前言

1、Nginx概述 

2、Nginx的历史与发展 

3、Nginx的应用场景 

二、Nginx基础 

1、Nginx架构 

2、Nginx工作原理 

3、Nginx安装 

4、Nginx配置 

5、Nginx的基本操作命令 


一、前言

1、Nginx概述 

Nginx("engine x"的发音类似于"引擎 X")是一款高性能的开源Web服务器和反向代理服务器,由Igor Sysoev创建,并于2004年首次公开发布。它以其卓越的性能、高度的可靠性、简单的配置和低资源消耗而闻名。

以下是Nginx的概述:

  1. 高性能:Nginx以其高效的事件驱动架构而闻名,能够处理大量并发连接和高流量。它使用异步非阻塞I/O模型,有效地处理客户端请求,并且在高负载下表现优异。
  2. 反向代理:Nginx作为反向代理服务器时,可以接收客户端的请求并将其转发给后端服务器。它能够进行负载均衡、缓存静态内容、处理SSL终止等操作,提高了Web应用程序的性能和可靠性。
  3. 负载均衡:Nginx可以将请求分发给多个后端服务器,以实现负载均衡。通过配置不同的负载均衡算法,例如轮询、IP哈希、最少连接等,可以根据不同的需求实现请求的合理分发。
  4. 静态文件服务:Nginx非常擅长提供静态文件服务,能够高效地提供HTML、CSS、JavaScript、图像等静态内容,并且支持文件压缩和HTTP缓存等功能。
  5. 反向代理缓存:Nginx可以缓存后端服务器返回的响应,以减轻后端服务器的负载并提高响应速度。它支持不同类型的缓存,包括文件缓存、内存缓存和代理缓存等。
  6. HTTPS支持:Nginx支持SSL/TLS协议,能够进行HTTPS加密通信,并且支持SSL终止、SSL重定向、证书验证等功能,保障了Web应用程序的安全性。
  7. 简单配置:Nginx的配置文件采用简洁直观的语法,易于理解和维护。它支持模块化配置,可以通过加载不同的模块来扩展其功能,满足不同的需求。
  8. 高度可扩展:Nginx是一个模块化的Web服务器,可以通过加载不同的模块来扩展其功能,例如HTTP反向代理、负载均衡、缓存、安全性等。这使得Nginx可以根据不同的需求进行定制和扩展,适用于各种规模和类型的Web应用程序。

   

2、Nginx的历史与发展 

Nginx的历史与发展可以追溯到2002年,当时俄罗斯工程师Igor Sysoev开始开发Nginx,最初是为了解决C10k问题(同时连接数超过一万个的问题)。随着时间的推移,Nginx逐渐发展成为一款高性能的Web服务器和反向代理服务器,成为现代互联网架构中不可或缺的一部分。

以下是Nginx的主要历史与发展里程碑:

  • 2004年:Nginx首次公开发布,版本号为0.1.0。最初的版本主要用于提供HTTP服务,并采用单进程单线程的架构。
  • 2006年:Nginx发布了稳定版本0.5.0,引入了多进程多线程的事件驱动架构。这一架构大大提高了Nginx的并发处理能力和性能表现。
  • 2008年:Nginx发布了1.0版本,宣布正式进入稳定版阶段。这一版本增加了许多新特性,包括反向代理、负载均衡、缓存、SSL支持等。
  • 2011年:Nginx成为全球第二大Web服务器,超过了Microsoft IIS,仅次于Apache HTTP Server。这一里程碑标志着Nginx在Web服务器市场上的强劲竞争力。
  • 2012年:Nginx发布了1.2版本,引入了WebSocket支持、HTTP流模块等新特性,进一步扩展了其功能和用途。
  • 2013年:Nginx发布了1.4版本,增加了基于事件的TCP代理功能,使其不仅仅可以作为HTTP服务器,还可以用于代理TCP流量,如SMTP、POP3等。
  • 2015年:Nginx发布了1.9.0版本,引入了HTTP/2支持,使其能够更高效地处理HTTP请求并提供更快的Web服务。
  • 2019年:Nginx被F5 Networks以约6.7亿美元的价格收购,成为F5 Networks的子公司。这一收购标志着Nginx在市场上的地位和影响力进一步提升。
  • 2020年:Nginx发布了1.19.0版本,引入了HTTP/3支持,并且将其作为正式版发布,使其成为全球首个正式支持HTTP/3协议的Web服务器。

 

3、Nginx的应用场景 

  Nginx作为一款高性能、轻量级、可靠的Web服务器和反向代理服务器,具有广泛的应用场景

包括但不限于以下几个方面:

  1. Web服务器:Nginx可以作为传统的Web服务器,用于提供静态和动态内容的服务。它能够高效地处理大量并发连接和高流量,提供稳定可靠的Web服务。
  2. 反向代理:Nginx作为反向代理服务器时,可以接收客户端的请求并将其转发给后端的应用服务器。它能够实现负载均衡、缓存、SSL终止、HTTP请求重定向等功能,提高了Web应用程序的性能和可靠性。
  3. 负载均衡:Nginx可以将请求分发给多个后端服务器,实现负载均衡。通过配置不同的负载均衡算法,例如轮询、IP哈希、最少连接等,可以根据不同的需求实现请求的合理分发。
  4. 缓存服务:Nginx能够缓存后端服务器返回的响应,减轻后端服务器的负载并提高响应速度。它支持不同类型的缓存,包括文件缓存、内存缓存和代理缓存等,适用于静态内容和动态内容的缓存。
  5. 静态文件服务:Nginx非常擅长提供静态文件服务,能够高效地提供HTML、CSS、JavaScript、图像等静态内容,并且支持文件压缩和HTTP缓存等功能。
  6. 反向代理缓存:Nginx可以作为反向代理服务器,缓存后端服务器返回的响应。通过缓存静态内容和动态内容,可以减轻后端服务器的负载并提高响应速度。
  7. API网关:Nginx可以作为API网关,用于管理和控制API的访问和流量。它能够实现API路由、请求转发、身份验证、限流、监控等功能,提高了API的安全性、可靠性和性能。
  8. 安全代理:Nginx可以用作安全代理,保护后端服务器免受恶意攻击和恶意流量的影响。它能够实现DDoS防护、WAF(Web应用程序防火墙)、IP黑名单和白名单等功能,提高了系统的安全性和稳定性。

 

Nginx具有广泛的应用场景,在互联网、云计算、容器化、微服务架构等领域发挥着重要作用,为用户提供稳定、高效、安全的Web服务和应用程序服务。

二、Nginx基础 

 1、Nginx架构 

Nginx的架构:

  • Nginx由内核和模块组成。内核的设计非常微小和简洁,主要完成查找配置文件并将客户端请求映射到一个location block的任务。而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。Nginx的模块从结构上分为核心模块、基础模块和第三方模块。
  • 核心模块:包括HTTP模块、EVENT模块和MAIL模块。这些模块提供了Nginx的基本功能和核心特性。
  • 基础模块:如HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块等。这些模块提供了Nginx在Web服务方面的扩展功能。
  • 第三方模块:用户可以根据自己的需要开发的模块,如HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块等。

   

2、Nginx工作原理 

Nginx的工作原理基于事件驱动模型,主要分为以下几个步骤:

  1. 接收客户端请求:Nginx通过监听一个或多个网络端口,来接收客户端的请求。它使用多路复用技术来高效地同时接收多个连接。
  2. 处理请求:当Nginx接收到客户端请求后,会按照配置文件中的规则进行匹配,并且根据配置文件中的指令,选择与请求匹配的服务器块进行处理。在这个过程中,Nginx会启动相应的模块来完成具体的任务,如访问控制、代理转发、负载均衡等。
  3. 完成请求:根据请求的内容和配置文件中的规则,Nginx可以进行各种处理,包括反向代理、负载均衡、动态内容处理等。处理完成后,Nginx会将响应结果返回给客户端。

 

 在Nginx的架构中,事件驱动模型是实现异步非阻塞特性的一个重要手段。Nginx通过事件驱动模型来监视多个文件描述符的状态变化,当文件描述符可读或可写时,就会向用户线程发送一个事件通知。用户线程通过事件处理机制(读取/写入数据)来处理这个事件,之后进行对应的业务逻辑处理并响应客户端请求。这种机制使得Nginx能够高效地处理大量的并发连接和请求。 

  

3、Nginx安装 

以Centos为例

1. 更新系统软件包列表:

在开始安装之前,建议先更新系统的软件包列表,确保您安装的软件包是最新的。可以执行以下命令来更新软件包列表:

sudo yum update


2. 安装Nginx软件包:

在更新系统软件包列表后,您可以使用yum包管理器安装Nginx软件包。执行以下命令来安装Nginx:

sudo yum install nginx


3. 启动Nginx服务:

安装完成后,您可以使用systemctl命令来启动Nginx服务。执行以下命令来启动Nginx:

sudo systemctl start nginx


4. 设置Nginx开机自启动(可选):

如果您希望Nginx在系统启动时自动启动,可以使用systemctl命令将Nginx服务添加到系统启动项中。执行以下命令来设置Nginx开机自启动:

sudo systemctl enable nginx


5. 验证Nginx是否正常运行:

安装和启动Nginx后,您可以使用curl命令或者在浏览器中输入服务器的IP地址来验证Nginx是否正常运行。执行以下命令来使用curl命令验证Nginx:

curl -I localhost1

  

4、Nginx配置 

Nginx的配置文件主要包括全局配置和站点配置两部分。全局配置位于nginx.conf文件中,而站点配置通常位于/etc/nginx/conf.d/目录下的单独配置文件中。下面是一个简单的Nginx配置示例:

全局配置文件 nginx.conf:
 

user nginx;          # 设置Nginx工作进程的用户
worker_processes auto;  # 自动根据系统CPU核心数量设置工作进程数量error_log /var/log/nginx/error.log;  # 错误日志文件路径
pid /var/run/nginx.pid;               # 进程ID文件路径events {worker_connections 1024;  # 每个工作进程的最大连接数
}http {include /etc/nginx/mime.types;  # 引入MIME类型配置文件default_type application/octet-stream;  # 默认MIME类型log_format main '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$http_user_agent"';access_log /var/log/nginx/access.log main;  # 访问日志文件路径sendfile on;  # 启用sendfile传输模式tcp_nopush on;  # 启用TCP_NOPUSH选项tcp_nodelay on;  # 启用TCP_NODELAY选项keepalive_timeout 65;  # 连接超时时间client_max_body_size 100m;  # 最大客户端请求体大小include /etc/nginx/conf.d/*.conf;  # 包含站点配置文件
}


站点配置文件 /etc/nginx/conf.d/example.conf:
 

server {listen 80;  # 监听端口server_name example.com;  # 域名或IP地址root /var/www/html;  # 网站根目录index index.html index.htm;  # 默认首页文件location / {try_files $uri $uri/ =404;  # 尝试匹配URI}error_page 500 502 503 504 /50x.html;  # 错误页面location = /50x.html {root /usr/share/nginx/html;}
}


在以上示例中:

  • 全局配置中定义了Nginx的基本设置,包括日志、工作进程、事件模块等。
  • 站点配置中定义了一个简单的HTTP服务器,监听80端口,处理来自example.com的请求,将根目录设置为/var/www/html,并定义了默认的首页文件为index.html。
  • location / 块定义了请求的处理规则,尝试匹配URI并返回相应的文件或状态码。
  • error_page 配置定义了服务器错误页面的处理方式。

可以根据具体需求修改和定制Nginx的配置文件,以适应不同的场景和应用需求。完成配置修改后,记得使用nginx -t命令检查配置文件的语法是否正确,并使用systemctl reload nginx命令重新加载Nginx配置。

  

5、Nginx的基本操作命令 

1. 查看版本信息:

  • nginx -v:显示版本信息并退出。
  • nginx -V:显示版本和配置选项信息,然后退出。

2. 检测配置文件:

  • nginx -t:检测配置文件是否有语法错误,然后退出。
  • nginx -T:检测配置文件是否有语法错误,并转储配置到标准输出,然后退出。
  • nginx -q:在检测配置文件期间屏蔽非错误信息。

3. 设置参数:

  • nginx -p prefix:设置前缀路径(默认是:/usr/share/nginx/)。
  • nginx -c filename:设置配置文件(默认是:/etc/nginx/nginx.conf)。
  • nginx -g directives:设置配置文件外的全局指令。

4. 重启Nginx服务:

  • 在Linux上,可以使用sudo systemctl restart nginx命令来重启Nginx服务。这个命令使用systemd来管理Nginx服务,并将重启Nginx并读取任何新的配置更改。
  • 另外,也可以使用sudo nginx -s reload命令来重启Nginx并应用任何新的配置更改。这个命令将不会中断正在处理的请求。

5. 停止Nginx服务:

  • 在Linux上,可以使用sudo systemctl stop nginx命令来停止Nginx服务。
  • 或者,也可以使用killall nginx命令来杀死所有nginx进程。但请注意,这个命令将立即停止Nginx服务,可能会中断正在处理的请求。

   

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于ELK的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! 

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

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

相关文章

软件全套资料梳理(需求、开发、实施、运维、安全、测试、交付、认证、评审、投标等)

软件全套精华资料包清单部分文件列表: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书&#xff0c…

根据docker部署nginx并且实现https

目录 一、Docker中启用HTTPS有几个重要的原因 二、https介绍 三、https过程 四、安装docker-20.10.18 五、如何获取证书 通过阿里云获取证书 六、docker部署nginx并且实现https 6.1准备证书 6.2准备nginx.conf 和 index.html文件 6.3生成容器 6.4浏览器验证证书 一、…

2024年4月24日华为春招实习试题【三题】-题目+题解+在线评测,2024.4.24,华为机试

2024年4月24日华为春招实习试题【三题】-题目题解在线评测,2024.4.24,华为机试 🏩题目一描述:输入格式输出格式样例1样例2样例3数据范围解题思路一:dfs解题思路二:直接二分查找哇!解题思路三&am…

MySQL数据库的初始化(创建库、创建表、向数据库添加测试数据)

MySQL数据库的初始化(创建库、创建表、向数据库添加测试数据) MySQL数据库简介MySQL创建一个新的数据库MySQL创建一张新的数据表简单(设置)表复杂(设置)表 填充测试数据SQL语句mysql>模式下输入的每句sq…

技术爱好者必看:如何用AI问答API彻底改变用户体验!

AI 问答 API 对接说明 我们知道,市面上一些问答 API 的对接还是相对没那么容易的,比如说 OpenAI 的 Chat Completions API,它有一个 messages 字段,如果要完成连续对话,需要我们把所有的上下文历史全部传递&#xff0…

FreeRtos内核源码分析(九)——协程

目录 一、协程简介 二、协程工作机制 2.1 协程控制块结构 2.2 协程管理方式 2.3 协程调度方式 2.4 协程通信机制 三、协程状态及状态切换 3.1 协程状态 3.2 状态切换 四、协程创建 五、协程调度分析 5.1 源码分析 5.2 逻辑图分析 六、协程通信 6.1 协程发送消息…

如何清除DNS缓存,刷新DNS

大家在使用域名访问服务器的时候,经常会遇到一个问题,同一个局域网里的两台电脑,一台可以访问而另一台不行。这是为什么呢?这里我要和大家说下DNS缓存的问题,顾名思义,每台电脑都有DNS缓存,在域…

ElasticSearch 8.X 源码导入idea并配置环境启动调试(mac环境)

主要是用于自己记录配置流程 环境 IntelliJ IDEA 2024.1.1 (Community Edition) jdk17(可以安装jenv管理) macos 14.4.1 gradle 8.5 资源准备 先在官网下载elasticsearch源码(GitHub - elastic/elasticsearch: Free and Open, Distrib…

webservice和TCP类型接口测试

1.webservice类型接口 1.1.webservice类型接口介绍 Web服务(WebService)是一种基于网络的应用程序接口(API),可通过网络来进行通信和交互。它们使用标准化的协议和格式来进行通信,最常见的是使用XML&#…

AI图书推荐:利用生成式AI实现业务流程超自动化

《利用生成式AI实现业务流程超自动化》(Hyperautomation with Generative AI)这本书探索了广泛的用例和示例,展示了超自动化在不同行业、领域和特定部门的多样化应用, 让您熟悉UiPath、Automation Anywhere和IBM等流行工具和平台&…

LeetCode 105.从前序与中序遍历序列构造二叉树

LeetCode 105.从前序与中序遍历序列构造二叉树 1、题目 题目链接:105. 从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树…

MVCC 详解

介绍 MVCC,全称 Multi-Version Concurrency Control,即多版本并发控制 MVCC的目的主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁。 这里的多版本指的是数据库中同时…

【GO】go语言中的HTTP标准库 - http编程

上一节已经学习了HTTP的基础知识,本章将学习关于go语言的HTTP编程,最重要的是掌握 net/http 包的用法,以及如何自己编写一个简单的Web服务端,通过客户端访问Server端等。 编写简单的Web 服务器 http.ListenAndServe 启动 Http S…

Unity开发中导弹路径散射的原理与实现

Unity开发中导弹路径散射的原理与实现 前言逻辑原理代码实现导弹自身脚本外部控制脚本 应用效果结语 前言 前面我们学习了导弹的追踪的效果,但是在动画或游戏中,我们经常可以看到导弹发射后的弹道是不规则的,扭扭曲曲的飞行,然后击…

Reactor Netty 其他-响应式编程-018

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Nex…

vue3点击添加小狗图片,vue3拆分脚本

我悄悄蒙上你的眼睛 模板和样式 <template><div class"XueXi_Hooks"><img v-for"(dog, index) in dog1List" :src"dog" :key"index" /><button click"addDog1">点我添加狗1</button><hr …

每日一题9:Pandas-填充缺失值

一、每日一题 DataFrame products --------------------- | Column Name | Type | --------------------- | name | object | | quantity | int | | price | int | ---------------------编写一个解决方案&#xff0c;在 quantity 列中将缺失的值 编…

Leetcode 剑指 Offer II 077.排序链表

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排…

Xilinx 千兆以太网TEMAC IP核 MDIO 配置及物理接口

基于AXI4-Lite接口可以访问MDIO(Management Data Input/Output)接口&#xff0c;而MDIO接口连接MAC外部的PHY芯片&#xff0c;用户可通过AXI4-Lite接口实现对PHY芯片的配置。 1 MDIO接口简介 开放系统互连模型OSI的最低两层分别是数据链路层和物理层&#xff0c;数据链路层的…

音视频入门基础:像素格式专题(2)——不通过第三方库将RGB24格式视频转换为BMP格式图片

音视频入门基础&#xff1a;像素格式专题系列文章&#xff1a; 音视频入门基础&#xff1a;像素格式专题&#xff08;1&#xff09;——RGB简介 音视频入门基础&#xff1a;像素格式专题&#xff08;2&#xff09;——不通过第三方库将RGB24格式视频转换为BMP格式图片 一、引…