linux系统---nginx基础

目录

一、Nginx的概念

二、Nginx常用功能

1、HTTP(正向)代理,反向代理

1.1正向代理

1.2 反向代理

2、负载均衡

2.1 轮询法(默认方法)

2.2 weight权重模式(加权轮询)

2.3 ip_hash

3、web缓存

三、基础特性

四、Web 服务相关的功能

五、Nginx进程结构

5.1主进程(master process)的功能


一、Nginx的概念

  1. Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
  2. Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
  3. Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。
  4. Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动。

二、Nginx常用功能

1、HTTP(正向)代理,反向代理

作为web服务器最常用的功能之一,尤其是反向代理。

1.1正向代理

Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。 正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

  • 简单一点:通过代理服务器来访问服务器的过程 就叫 正向代理。
  • 需要在客户端配置代理服务器进行指定网站访问

1.2 反向代理

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。

我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。 

2、负载均衡

Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的啦,你可以参照所有的负载均衡算法,给他一一找出来做下实现。

Nginx给出来三种关于负载均衡的方式:

2.1 轮询法(默认方法)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。

2.2 weight权重模式(加权轮询)

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源。weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大

2.3 ip_hash

上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。

我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

3、web缓存

Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。

三、基础特性

nginx具有高并发、高性能,可扩展性好,高可靠性,热部署,内存消耗少,成本低,稳定性高,支持重写机制,BSD许可证等特点

  1. 模块化设计,较好的扩展性
  2. 高可靠性
  3. 支持热部署:不停机更新配置文件,升级版本,更换日志文件
  4. 低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存
  5. event-driven, aio, mmap,sendfile

四、Web 服务相关的功能

  1. 虚拟主机(server)
  2. 支持 keep-alive 和管道连接(利用一个连接做多次请求)
  3. 访问日志(支持基于日志缓冲提高其性能)
  4. url rewirte
  5. 路径别名
  6. 基于IP及用户的访问控制
  7. 支持速率限制及并发数限制
  8. 重新配置和在线升级而无须中断客户的工作进程

五、Nginx进程结构

web请求处理机制

多进程方式:服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求。

多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程来个客户方进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定。

5.1主进程(master process)的功能

  1. 对外接口:接收外部的操作(信号)
  2. 对内转发:根据外部的操作的不同,通过信号管理 Worker
  3. 监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程
  4. 读取Nginx 配置文件并验证其有效性和正确性
  5. 建立、绑定和关闭socket连接
  6. 按照配置生成、管理和结束工作进程
  7. 接受外界指令,比如重启、升级及退出服务器等指令
  8. 不中断服务,实现平滑升级,重启服务并应用新的配置
  9. 开启日志文件,获取文件描述符
  10. 不中断服务,实现平滑升级,升级失败进行回滚处理
  11. 编译和处理perl脚本

5.2 工作进程(worker process)的功能

所有 Worker 进程都是平等的

实际处理:网络请求,由 Worker 进程处理

Worker进程数量:一般设置为核心数,充分利用CPU资源,同时避免进程数量过多,导致进程竞争CPU资源,

  1. 增加上下文切换的损耗
  2. 接受处理客户的请求
  3. 将请求依次送入各个功能模块进行处理
  4. I/O调用,获取响应数据
  5. 与后端服务器通信,接收后端服务器的处理结果
  6. 缓存数据,访问缓存索引,查询和调用缓存数据
  7. 发送请求结果,响应客户的请求
  8. 接收主程序指令,比如重启、升级和退出等

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

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

相关文章

前端开发中基于Web Speech API(speechSynthesis接口)实现文字转语音功能

文章目录 一、Web Speech 的概念及用法二、Web Speech 的 API 接口1、SpeechSynthesis属性方法 2、SpeechSynthesisUtterance属性方法 三、Web Speech 的 用法用法演示一用法演示二htmljs 四、扩展 一、Web Speech 的概念及用法 在开发业务系统时,有时候可能需要使…

基于SpringBoot+Apache ECharts的前后端分离外卖项目-苍穹外卖(十八)

数据展示 1. Apache ECharts1.1 介绍1.2 入门案例 2. 营业额统计2.1 需求分析和设计2.1.1 产品原型2.1.2 接口设计 2.2 代码开发2.2.1 VO设计2.2.2 Controller层2.2.3 Service层接口2.2.4 Service层实现类2.2.5 Mapper层 2.3 功能测试 3. 用户统计3.1 需求分析和设计3.1.1 产品…

chrome闪退后打不开问题 打开立即闪退

今天刚遇到,大概率是某些网站引起的闪退,重启和清理也不能解决问题 网上到处都是答非所问,还有什么打开chrome再进行设置这种回答 在此解决下 注意该方法根据我测试,唯一会损失的是chrome扩展,可以提前去 C:\Users…

【人脸朝向识别与分类预测】基于PNN神经网络

课题名称:基于PNN神经网络的人脸朝向识别分类 版本日期:2024-02-20 运行方式:直接运行PNN0503.m文件 代码获取方式:私信博主或 QQ:491052175 模型描述: 采集到一组人脸朝向不同角度时的图像,图像来自不…

【Spring】事务总结

目录 1. 什么是事务? 2. 事务的特性(ACID)了解么? 3. 详谈 Spring 对事务的支持 3.1. Spring 支持两种方式的事务管理 1).编程式事务管理 2)声明式事务管理 3.2. Spring 事务管理接口介绍 3.2.1. PlatformTransactionManager:事务管理…

投资黄金在哪里买比较好?

黄金,作为一种传统的避险资产,历来受到投资者的青睐。在全球经济波动的大背景下,黄金的价值愈发凸显。那么,投资黄金在哪里买比较好呢?本文将重点探讨在香港黄金平台投资黄金的优势,并以金田金业为例&#…

C++面试基础:如何高效利用CPU缓存

目录 局部性原理(Locality Principle) 数据结构的布局 缓存友好的算法 缓存大小和关联性 避免随机访问 使用缓存友好的数据结构 总结 高效利用CPU缓存是编写高性能C代码的关键之一。以下是一些在面试中可能会讨论到的方法。 局部性原理(Locality Principle) 时间局部性…

Powershell中conda init失效、无法使用conda activate的问题

起因 近期折腾了一下Windows Terminal,安装配置了Powershell 7.3,然后发现conda activate在Powershell中用不了了,conda init powershell不起作用,conda init cmd.exe没有问题 分析 因为powershell的profile.ps1文件路径中存在…

ELK 简介安装

1、概念介绍 日志介绍 日志就是程序产生的,遵循一定格式(通常包含时间戳)的文本数据。 通常日志由服务器生成,输出到不同的文件中,一般会有系统日志、 应用日志、安全日志。这些日志分散地存储在不同的机器上。 日志…

网络层的DDoS攻击与应用层的DDoS攻击之间的区别

DDoS攻击(即“分布是拒绝服务攻击”),是基于DoS的特殊形式的拒绝服务攻击,是一种分布式、协作的大规模攻击方式,主要瞄准一些企业或政府部门的网站发起攻击。根据攻击原理和方式的区别,可以把DDoS攻击分为两…

The Grapes NFT 概览与数据分析

作者:stellafootprint.network 编译:cicifootprint.network 数据源:The Grapes NFT Collection Dashboard The Grapes 是一个有趣且具有吸引力的 NFT 收藏集合,包含 3,333 个精心制作的 NFT。这个 NFT 项目会在 2024 年再创高…

linux僵尸进程

僵尸进程(Zombie Process)是指在一个进程终止时,其父进程尚未调用wait()或waitpid()函数来获取该进程的终止状态信息,导致进程的资源(如进程表中的记录)仍然保留在系统中的一种状态。 当一个进程结束时&am…

GO数组解密:从基础到高阶全解

在本文中,我们深入探讨了Go语言中数组的各个方面。从基础概念、常规操作,到高级技巧和特殊操作,我们通过清晰的解释和具体的Go代码示例为读者提供了全面的指南。无论您是初学者还是经验丰富的开发者,这篇文章都将助您更深入地理解…

css美化网页元素

1.span标签的作用 能让某个文字或词语凸显出来 2.字体样式 属性 含义 示例 font-family 设置字体类型 font-family:"隶书"; font-size 设置字体大小 font-size:12px; font-style 设置字体风格 font-style:italic; font-weight 设置字体的粗细 font-we…

java使用Swagger文档报错“java.lang.NullPointerException: null”

java使用Swagger文档报错 一、问题二、解决1、报错2、源码3、方法 一、问题 java项目引入Swagger文档,后期因为一些原因导致Swagger文档不能使用,但是不影响项目运行和正常使用,但每次启动都会报错。 原因有可能是: 1、一个实体类…

手写myscrapy(八)

项目地址:https://gitee.com/wyu_001/myscrapy 接下来接着说明如何多线程运行多个爬虫脚本: 项目的根目录下有个batch.py文件,这个就是批量运行多个爬虫的脚本,这里使用了线程池,同时运行spider下的多个爬虫类&#xf…

编程笔记 Golang基础 038 并发与原子变量

编程笔记 Golang基础 038 并发与原子变量 一、原子操作(Atomic Operation)二、原子变量三、应用示例 在 Go 语言(Golang)的并发编程中,原子变量是用于确保多线程安全的重要工具。当多个 Goroutine 并发访问和修改同一变…

【HMAC-SHA1算法以及工作原理】

曾梦想执剑走天涯,我是程序猿【AK】 目录 简述概要知识图谱总结 简述概要 连接HMAC-SHA1工作原理以及工具代码 知识图谱 HMAC(Hash-based Message Authentication Code,基于散列的消息认证码)是一种结合了密钥和消息的认证方法…

刚拿到的《HarmonyOS应用开发者高级认证》,全网整理的题目,将近300题,100%通过

刚拿到《HarmonyOS应用开发者高级认证》,现在把题目和答案分享一下,这些题目是我根据其他网站整理的,宁滥勿缺,有个别题目是重复的,抽半天时间看一下,应该是稳过的。当然建议还是先跟着文档学一下鸿蒙或者看…

Centos 7.5 上nginx设置开机自启动

nginx的安装目录 : /usr/local/nginx 一、没有设置开机自启动前,需要执行/usr/local/nginx/sbin/nginx 启动 二、接下来,我们设置开机自启动,就不用手动启动nginx了 1、cd /usr/lib/systemd/system/ 2、vi nginx.service [un…