[Linux网络编程]Nginx入门学习

Posted Windalove

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Linux网络编程]Nginx入门学习相关的知识,希望对你有一定的参考价值。

    初次接触到nginx,只是一个快速入门的学习笔记记录。

参考链接

Nginx的概念

  • Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 或者说 轻量级高并发服务器 ,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。2011年6月1日,nginx 1.0.4发布。
  • 其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。
  • Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

Nginx的作用一:反向代理

什么是正向代理

  • 正向代理的概念:VPN是一个正向代理的例子,正向代理最大的特点是客户端非常明确要访问的服务器地址服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。
  • 总而言之:正向代理,“它代理的是客户端”,是一个位于客户端和原始服务器(Origin Server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器)。然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

正向代理的用途

  1. 访问原来无法访问的资源,如 Google。
  2. 可以做缓存,加速访问资源。
  3. 对客户端访问授权,上网进行认证
  4. 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息。

什么是反向代理

  • 在实际场景中:例如我国的某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了。此时就出现了一个大家耳熟能详的名词:分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题。某宝网站中大部分功能也是直接使用 Nginx 进行反向代理实现的,并且通过封装 Nginx 和其他的组件之后起了个高大上的名字:Tengine。

  • 在上图中,多个客户端给服务器发送的请求,Nginx 服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了此时请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx 扮演的就是一个反向代理角色客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。
  • 反向代理,“它代理的是服务端”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

Nginx的作用二:负载均衡

什么是负载均衡

  • 这里提到的客户端发送的、Nginx 反向代理服务器接收到的请求数量,就是我们说的负载量
  • 请求数量按照一定的规则进行分发,到不同的服务器处理的规则,就是一种均衡规则
  • 总结:所以将服务器接收到的请求按照规则分发的过程,称为负载均衡。
  • 硬件负载均衡和软件负载均衡就不多说明了(待补充)

Nginx支持的负载均衡调度算法

  1. weight 轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx 会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率。权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。

  2. ip_hash:每个请求按照发起客户端的 ip 的 hash 结果进行匹配,这样的算法下一个固定 ip 地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下 Session 共享的问题

  3. fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配。响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少,它是结合了前两者的优点的一种调度算法。但是需要注意的是 Nginx 默认不支持 fair 算法,如果要使用这种调度算法,请安装 upstream_fair 模块。(这个应该是指可能有的服务器比较远,选择近的吧)。

  4. url_hash:按照访问的 URL 的 hash 结果分配请求,每个请求的 URL 会指向后端固定的某个服务器,可以在 Nginx 作为静态服务器的情况下提高缓存效率。同样要注意 Nginx 默认不支持这种调度算法,要使用的话需要安装 Nginx 的 hash 软件包。

Nginx的作用二:动静分离

什么是动态分离

  • 在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。

动态请求和静态请求

  • 什么是动态请求?
  • 比如说我们需要去查询数据库,从数据库中返回需要的信息,那么这种请求我们就可以使用 nginx 直接给转发到 tomcat 去处理,这种请求也叫动态请求
  • 什么是静态请求?
  • 比如说我们现在需要去请求得到一个图片的地址,或者得到一个 html 文件,这种请求就叫静态请求,这时候就可以使用 nginx ,把请求去指向一个静态资源服务器。

以上是关于[Linux网络编程]Nginx入门学习的主要内容,如果未能解决你的问题,请参考以下文章

Linux 视频教程 命令 学习 入门 开发 系统 培训 运维 网络编程

linux (08) nginx入门详解

Nginx 小入门记录 之 初识Nginx和环境准备

入门java都需要学习啥知识?

Linux编程入门--正点原子Linux驱动开发指南学习2021W26

Linux编程入门--正点原子Linux驱动开发指南学习2021W23