分布式 - 负载均衡Nginx:Nginx常见问题总结(一)

文章目录

      • 01. 什么是Nginx?
      • 02. 为什么要用Nginx?
      • 03. 为什么Nginx性能这么高?
      • 04. Nginx 为什么不使用多线程?
      • 05. Nginx 请求处理流程是什么?
      • 06. Nginx怎么处理请求的?
      • 07. 什么是正向代理和反向代理?
      • 08. 反向代理服务器的优点是什么?
      • 09. Nginx的优缺点?
      • 10. Nginx应用场景?
      • 11. Nginx目录结构有哪些?
      • 12. Nginx配置文件 nginx.conf 有哪些属性模块?

01. 什么是Nginx?

Nginx是一款高性能的开源Web服务器软件,也可以用作反向代理服务器、负载均衡器和HTTP缓存。Nginx的设计目标是提供高性能、高并发、低内存消耗和稳定性,因此在处理静态文件、动态内容、SSL加密等方面表现出色,被广泛应用于互联网、移动应用、视频流媒体等领域。

02. 为什么要用Nginx?

Nginx是一款高性能的Web服务器和反向代理服务器,它的主要优点包括:

① 高性能:Nginx采用了事件驱动的异步非阻塞处理方式,能够处理大量并发连接,同时占用较少的系统资源,因此能够提供更高的性能和更好的响应速度。

② 可扩展性:Nginx的模块化设计使得它可以轻松地扩展和定制,可以根据需要添加或删除模块,从而满足不同的需求。

③ 反向代理和负载均衡:Nginx可以作为反向代理服务器,将客户端请求转发到后端的多个服务器上,从而实现负载均衡和高可用性。

④ 静态文件服务:Nginx可以快速地处理静态文件,如HTML、CSS、JavaScript等,从而提高网站的访问速度。

⑤ 安全性:Nginx具有强大的安全性能,可以防止常见的Web攻击,如DDoS攻击、SQL注入等。

综上所述,Nginx是一款高性能、可扩展、安全可靠的Web服务器和反向代理服务器,因此被广泛应用于互联网领域。

03. 为什么Nginx性能这么高?

Nginx的高性能主要归功于以下几个方面:

① 异步非阻塞的事件驱动模型:Nginx采用了异步非阻塞的事件驱动模型,可以在单个进程中处理大量的并发连接,而不会因为阻塞等待I/O操作而浪费CPU资源。

② 轻量级的进程和线程管理:Nginx采用了轻量级的进程和线程管理方式,可以在不增加系统负担的情况下处理大量的并发请求。

③ 高效的内存管理:Nginx采用了内存池的方式管理内存,可以避免频繁的内存分配和释放,提高了内存的利用率和系统的性能。

④ 高度可定制化的模块化架构:Nginx的模块化架构可以根据需要选择不同的模块,可以灵活地扩展和定制功能,同时也可以避免不必要的功能和性能损失。

综上所述,Nginx的高性能主要得益于其优秀的设计和实现,以及对性能的不断优化和改进。

04. Nginx 为什么不使用多线程?

Nginx 之所以不使用多线程,是因为它采用了一种基于事件驱动的异步模型,即使用单线程和非阻塞 I/O 来处理并发请求。这种模型可以在不创建新线程的情况下处理大量并发连接,从而避免了线程切换和上下文切换的开销,提高了系统的性能和可伸缩性。

具体来说,Nginx 的工作流程是这样的:当有新的连接请求到来时,Nginx 会将其加入到事件队列中,然后通过 epoll 等系统调用来监听这些事件。当某个事件就绪时,Nginx 会立即处理它,而不是等待线程的调度。这种方式可以让 Nginx 在处理大量并发连接时,保持较低的系统负载和内存占用。

此外,Nginx 还采用了一些优化技术,如使用内存池来减少内存分配的开销,使用 sendfile 系统调用来提高文件传输的效率等,从而进一步提高了系统的性能和可靠性。

05. Nginx 请求处理流程是什么?

Nginx是一款高性能的Web服务器和反向代理服务器,它的请求处理流程如下:

① 接收请求:Nginx监听指定的端口,当有请求到达时,Nginx会接收并解析请求。

② 解析请求头:Nginx会解析请求头,包括请求方法、URL、协议版本、请求头部等信息。

③ 处理请求:根据请求的URL和配置的规则,Nginx会选择对应的处理方式,如静态文件直接返回、反向代理到其他服务器等。

④ 处理请求体:如果请求包含请求体,Nginx会将请求体缓存到内存中,或者转发给后端服务器。

⑤ 处理响应:Nginx会根据请求处理的结果生成响应,包括响应头和响应体。

⑥ 发送响应:Nginx将响应发送给客户端,完成请求处理过程。

总的来说,Nginx的请求处理流程非常高效和灵活,可以根据不同的需求进行配置和优化。

06. Nginx怎么处理请求的?

当Nginx接收到一个请求时,它会首先根据listen和server_name指令来匹配对应的server模块。如果有多个server模块匹配成功,则会选择最佳匹配的那个模块来处理请求。接下来,Nginx会在选定的server模块中匹配location指令。location指令用于匹配请求的URI,以确定应该使用哪个配置块来处理请求。如果有多个location指令匹配成功,则会选择最佳匹配的那个location块来处理请求。

例如,假设有以下Nginx配置:

server {listen 80;server_name example.com;location / {# 处理根路径请求}location /blog {# 处理/blog路径请求}
}

当Nginx接收到一个请求时,它会首先根据listen和server_name指令匹配到该server模块。然后,它会在该模块中匹配location指令。如果请求的URI是/,则会匹配到第一个location块,如果请求的URI是/blog,则会匹配到第二个location块。最终,Nginx会使用匹配成功的location块来处理请求。

07. 什么是正向代理和反向代理?

正向代理和反向代理都是代理服务器的应用场景,它们的区别在于代理的方向不同。

正向代理是客户端通过代理服务器访问互联网资源的过程,代理服务器代表客户端向互联网服务器请求资源,然后将响应结果返回给客户端。举个例子,如果你在中国大陆无法访问Google,你可以通过设置代理服务器来访问Google,这个代理服务器就是正向代理。

反向代理则是客户端通过代理服务器访问内部资源的过程,代理服务器代表内部服务器向客户端提供服务,客户端并不知道真正提供服务的是哪个服务器。举个例子,假设有一个网站www.example.com,它有多台服务器提供服务,这些服务器的IP地址对外不可见,而代理服务器的IP地址对外可见,客户端访问www.example.com时,请求会先到达代理服务器,代理服务器会根据负载均衡算法将请求转发到其中一台服务器上,然后将响应结果返回给客户端,这个代理服务器就是反向代理。

反方代理就是请求统一被 Nginx 接收,Nginx 反向代理服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。

总的来说,正向代理是代理客户端,反向代理是代理服务器。

08. 反向代理服务器的优点是什么?

使用反向代理服务器有以下几个优点:

① 负载均衡:反向代理服务器可以将请求分发到多个后端服务器上,从而实现负载均衡,避免单个服务器过载。

② 缓存加速:反向代理服务器可以缓存静态资源,如图片、CSS、JavaScript等,从而加速页面加载速度,减轻后端服务器的负担。

③ 安全性:反向代理服务器可以隐藏后端服务器的真实IP地址,从而提高系统的安全性,防止攻击者直接攻击后端服务器。

④ 灵活性:反向代理服务器可以根据请求的URL或其他条件,将请求转发到不同的后端服务器上,从而实现灵活的请求处理。

⑤ 可靠性:反向代理服务器可以监控后端服务器的状态,当某个服务器出现故障时,自动将请求转发到其他可用的服务器上,从而提高系统的可靠性。

09. Nginx的优缺点?

Nginx是一款高性能的Web服务器和反向代理服务器,它的优缺点如下:

优点:

① 高性能:Nginx采用了异步非阻塞的事件驱动模型,能够处理大量并发连接,具有很高的吞吐量和低延迟。
② 轻量级:Nginx的代码量很小,占用资源少,启动速度快,适合用于高并发的Web应用。
③ 可扩展性:Nginx支持模块化的架构,可以通过编写模块来扩展其功能,也可以通过动态模块加载来实现动态扩展。
④ 高可靠性:Nginx具有很好的容错能力,可以在后端服务器出现故障时自动切换到备用服务器,保证服务的可用性。
⑤ 安全性:Nginx具有很好的安全性,可以通过配置文件来限制访问权限,防止恶意攻击。

缺点:

① 配置复杂:Nginx的配置文件比较复杂,需要一定的学习成本。
② 功能相对有限:相比于其他Web服务器,Nginx的功能相对有限,不能像Apache那样支持多种编程语言和模块。
③ 不支持动态内容:Nginx不能像Apache那样直接解析PHP等动态内容,需要通过FastCGI等方式来实现。
④ 不支持Windows平台:Nginx不支持Windows平台,只能在Linux、Unix等操作系统上运行。

10. Nginx应用场景?

Nginx是一款高性能的Web服务器和反向代理服务器,它的应用场景非常广泛,包括但不限于以下几个方面:

① Web服务器:Nginx可以作为Web服务器来提供静态文件的服务,如HTML、CSS、JavaScript、图片等,同时也支持FastCGI、uWSGI、SCGI等协议,可以与应用服务器配合使用,提供动态内容的服务。

② 反向代理服务器:Nginx可以作为反向代理服务器,将客户端的请求转发到后端的应用服务器,实现负载均衡、缓存、SSL终端等功能,提高应用的可用性和性能。

③ 负载均衡器:Nginx可以作为负载均衡器,将请求分发到多个应用服务器上,实现请求的平衡分配,提高应用的可用性和性能。

④ 静态文件服务器:Nginx可以作为静态文件服务器,提供静态文件的服务,如图片、视频、音频等,同时也支持文件的压缩和缓存,提高文件的传输速度和用户体验。

⑤ CDN加速:Nginx可以作为CDN加速服务器,将静态文件缓存到多个节点上,提高文件的传输速度和用户体验。

总之,Nginx是一款功能强大、性能优异的Web服务器和反向代理服务器,可以满足各种不同的应用场景需求。

11. Nginx目录结构有哪些?

[root@localhost ~]# tree /usr/local/nginx
/usr/local/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默认站点目录
│   ├── 50x.html                     # 错误页面优雅替代显示文件,例如当出现502错误时会调用此页面
│   └── index.html                   # 默认的首页文件
├── logs                             # Nginx日志目录
│   ├── access.log                   # 访问日志文件
│   ├── error.log                    # 错误日志文件
│   └── nginx.pid                    # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
├── proxy_temp                       # 临时目录
├── sbin                             # Nginx命令目录
│   └── nginx                        # Nginx的启动命令
├── scgi_temp                        # 临时目录
└── uwsgi_temp                       # 临时目录

12. Nginx配置文件 nginx.conf 有哪些属性模块?

Nginx配置文件nginx.conf中常见的属性模块包括:

① user: 指定Nginx进程的运行用户和用户组。
② worker_processes: 指定Nginx启动的worker进程数。
③ pid: 指定Nginx主进程的PID文件路径。
④ events: 定义Nginx的事件模型,包括事件驱动模型和连接数限制等。
⑤ http: 定义HTTP协议相关的配置,包括HTTP服务器、虚拟主机、缓存、日志等。
⑥ server: 定义一个HTTP服务器或虚拟主机的配置,包括监听端口、域名、SSL证书等。
⑦ location: 定义一个URI的配置,包括匹配规则、反向代理、缓存等。
⑧ upstream: 定义一个后端服务器的配置,包括负载均衡算法、健康检查等。
⑨ include: 引入其他配置文件。

除了以上常见的属性模块,Nginx还支持许多第三方模块,如gzip、ssl、rewrite等,可以通过在配置文件中加载这些模块来扩展Nginx的功能。

worker_processes  1# worker进程的数量
events {                              					# 事件区块开始worker_connections  1024# 每个worker进程支持的最大连接数
}                                    					# 事件区块结束
http {                               					# HTTP区块开始include       mime.types;            				# Nginx支持的媒体类型库文件default_type  application/octet-stream;     		# 默认的媒体类型sendfile        on;       							# 开启高效传输模式keepalive_timeout  65# 连接超时server {            								# 第一个Server区块开始,表示一个独立的虚拟主机站点listen       80# 提供服务的端口,默认80server_name  localhost;       					# 提供服务的域名主机名location / {            						# 第一个location区块开始root   html;       						# 站点的根目录,相当于Nginx的安装目录index  index.html index.htm;      			# 默认的首页文件,多个用空格分开}          										# 第一个location区块结果error_page   500502503504  /50x.html;     		# 出现对应的http状态码时,使用50x.html回应客户location = /50x.html {          				# location区块开始,访问50x.htmlroot   html;      							# 指定对应的站点目录为html}}  ......
}

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

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

相关文章

Python爬虫学习笔记(七)————Selenium

目录 1.什么是selenium? 2.为什么使用selenium? 3.selenium安装 4.selenium的使用步骤 5.selenium的元素定位 6.访问元素信息 7.交互 1.什么是selenium? (1)Selenium是一个用于Web应用程序测试的工具。 &#…

深度理解 Spring AOP

一、什么是AOP(面向切面编程)?🍉 AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式 和运行期 动态代理 实现程序功能的统一维护的一种技术。 AOP (面向切面编程)是 OOP&a…

代码随想录额外题目| 数组02 ●189旋转数组 ●724寻找数组中心索引

#189旋转数组 很快写出来但是用了个新数组&#xff0c;不好 void rotate(vector<int>& nums, int k) {vector<int> res(nums.size(),0);for(int i0;i<nums.size();i){int newiik;if(newi>nums.size()-1) newinewi%nums.size();res[newi]nums[i];}numsr…

【react】react18的学习(十二)– 底层原理(二)之 迭代器 iterator

迭代器iterator 是一种 ES6 规范&#xff0c;具有这种机制的数据结构才可以使用for of循环&#xff1a;返回每一项的值&#xff1b; 原型链具有Symbol.iterator属性的数据结构都具备&#xff1b;如数组、部分类数组、字符串等&#xff1b; 普通对象就不能用&#xff1b; for-…

vue组件(个人学习笔记三)

目录 友情提醒第一章、vue的组件1.1&#xff09;什么是SPA应用1.2&#xff09;vue的组件简介1.3&#xff09;vue工程中的main.js文件 第二章、Vue组件的使用2.1&#xff09;一般组件的自定义2.2&#xff09;注册组件&#xff1a;全局注册和局部注册2.2.1&#xff09;全局注册&a…

和chatgpt学架构04-路由开发

目录 1 什么是路由2 如何设置路由2.1 安装依赖2.2 创建路由文件2.3 创建首页2.4 编写HomePage2.5 更新路由配置2.6 让路由生效 3 测试总结 要想使用vue实现页面的灵活跳转&#xff0c;其中路由配置是必不可少的&#xff0c;我们在做开发的时候&#xff0c;先需要了解知识点&…

Vue--》打造个性化医疗服务的医院预约系统(二)

今天开始使用 vue3 + ts 搭建一个医院预约系统的前台页面,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关…

基于Python+多层RNN+Tensorflow藏头诗与歌词智能生成-深度学习算法应用(含全部工程源码)+训练数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境Tensorflow 环境PyCharm环境 模块实现古诗生成1. 数据预处理2. 模型构建3. 模型训练及保存4. 使用模型生成古诗5. 产生藏头诗6. 用词云展示生成的古诗 歌词生成1. 数据预处理2. 模型构建3. 模型训练并保存4. 生成…

基于Kitti数据集的智能驾驶目标检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于Kitti数据集的智能驾驶目标检测系统可用于日常生活中检测与定位行人&#xff08;Pedestrian&#xff09;、面包车&#xff08;Van&#xff09;、坐着的人&#xff08;Person Sitting&#xff09;、汽车&#xff08;Car&#xff09;、卡车&#xff08;Truck…

【字符流】案例:文件到集合

案例&#xff1a;文件到集合 1.需求&#xff1a; 把文本文件中的数据读取到集合&#xff0c;并遍历集合。要求&#xff1a;文件中的每一行数据是一个集合元素 2.思路 创建字符缓冲输入流对象创建ArrayList集合对象调用字符缓冲输入流对象的方法读数据把读取到的字符串数据存…

Java IO

stream 流 是一种抽象概念&#xff0c;它代表了数据的无结构化传递。按照流的方式进行输入输出&#xff0c;数据被当成 无结构的字节序或字符序列。从流中取得数据的操作称为提取操作&#xff0c;而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO 流。换…

通过Docker+frp实现内网穿透

通过Dockerfrp实现内网穿透 这篇文章是最近又折腾了一个局域网的小网站&#xff0c;在这边记录一下内网穿透的方法&#xff0c;还是老方法frp&#xff0c;只不过之前用的是.start.sh&#xff0c;这次使用的是Docker 配置内网穿透一定要有一个公网服务器&#xff0c;也就是能访问…

spring复习:(50)@Configuration注解配置的singleton的bean是什么时候被创建出来并缓存到容器的?

一、主类&#xff1a; 二、配置类&#xff1a; 三、singleton bean的创建流程 运行到context.refresh(); 进入refresh方法&#xff1a; 向下运行到红线位置时&#xff1a; 会实例化所有的singleton bean.进入finisheBeanFactoryInitialization方法&#xff1a; 向下拖动代…

JavaWeb课程设计项目实战(06)——项目编码实践3

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 在本教程教程中&#xff0c;我们实现学生列表的显示。 Student 请在bean包下创建Student类&#xff0c;代码如下&#xff1a; package com.cn.bean; /*** 本文作者&#…

数据科学团队的角色分工

描述数据科学团队中角色分工常用下列维度。进一步以数据可视化直观表达的能力雷达图: ML Ops - 机器学习运维 Data Pipelines - 数据流水线 Database - 数据库 Data Viz - 数据可视化 Storytelling - 数据讲故事 Business Insights - 业务洞察 Reporting - 报告 Experimentatio…

【100天精通python】Day10:函数的创建和调用,参数传递,返回值,变量作用域以及匿名函数

目录 1. 函数的创建和调用 1.1 函数的创建 1.2 调用函数 2 参数传递 2.1 传递方式 2.2 形参和实参 2.3 位置参数 2.4 关键字参数 2.5 可变参数 2.6 为参数设置默认值 3 返回值 4 变量的作用域 4.1 局部变量 4.2 嵌套变量 4.3 全局变量 5 匿名函数&#xff0…

X86设备启动过程

文章目录 一、电源自检二、BIOS自检三、引导设备选择四、主引导记录4.1 0x7c0 五、加载操作系统 x86计算机启动过程&#xff0c;主要分为这几个阶段&#xff1a;电源自检、BIOS自检、引导设备的选择、主引导记录、加载操作系统。 一、电源自检 当我们按下开关键后&#xff0c;…

uni-app image加载错误 404 替换为默认图片

双层v-for 使用item修改 aitem.cat_icon || defaultPic绑定图片src属性为aitem.cat_icon 如果aitem.cat_icon的值为空字符串或undefined&#xff0c;那么默认图片defaultPic被显示出来当图片加载错误时,触发handleImageError方法,将aitem传进去 <!-- 页面--><view …

Java 知识合集 | 多线程与并发

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

rollup的五大核心配置

一、rollup.config.js基本配置 例如&#xff0c;以下是一份基本的 rollup.config.js 文件代码&#xff1a; import babel from rollup-plugin-babel; import commonjs from rollup-plugin-commonjs; import resolve from rollup-plugin-node-resolve;export default {input: …