Nginx基础知识

·  阅读 128

1、Nginx 概述

Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,事实上

nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有:百度、京

东、新浪、网易、腾讯、淘宝等

(1)Nginx是一个高性能的HTTP和方向代理服务器

(2)采用C语言编写

(3)支持的操作系统众多,windows、linux、MacOS X

(4)安全性高,外界只能访问nginx所在服务器,nginx将请求转发内部服务器。调用后,返回调用的

结果

(5)可实现负载均衡

(6)Rewrite功能强大

2、Nginx作为 web 服务器

Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php等。但是

不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发,性能是其最重要的

考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。

3、正向代理

Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。

正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访

问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理

(1)需要在客户端配置代理服务器进行指定网站访问 )需要在客户端配置代理服务器进行指定网站访

问 )需要在客户端配置代理服务器进行指定网站访问 )

4、反向代理

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

发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向

代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地

址。

暴露的是代理服务器 地址,隐藏了真实暴露的是代理服务器 地址,隐藏了真实暴露的是代理服务器 地

址,隐藏了真实IP地址

在实际项目开发中,运用最多的也是方向代理,这里就示范下:

1、在本机下载tomacat,运行起来

2、修改nginx配置文件,在默认的80端口的配置下,增加location配置并保存

3、重启nginx服务

4、分别在虚拟机内部和宿主机访问nginx的80端口

5、在宿主机(安装VMware的机器)上访问nginx的80端口

5、负载均衡

客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕

后,再将结果返回给客户端。

这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随

着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服

务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于

服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?

我们首先想到的可能是升级服务器的配置,比如提高 CPU 执行频率,加大内存等提高机器的物理性能

来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能满足日益提升的需求了。

最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量是极其庞大的,那么类似上面的系统

架构,将机器都增加到现有的顶级物理配置,都是不能够满足需求的。那么怎么办呢?

上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题的办法行不通

了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器

的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多

个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。

设置负载均衡之后,tomcat的session,会发生不存再的情况,解决办法

1.最简单,不常用

存储在cookie中

2.常用

存放再redis中

5.1、ip_hash(通过客户端请求ip进行hash,再通过hash值选择后端server):

当你服务端的一个特定url路径会被同一个用户连续访问时,如果负载均衡策略还是轮询的话,那该用户

的多次访问会被打到各台服务器上,这显然并不高效(会建立多次http链接等问题)。

甚至考虑一种极端情况,用户需要分片上传文件到服务器下,然后再由服务器将分片合并,这时如果用

户的请求到达了不同的服务器,那么分片将存储于不同的服务器目录中,导致无法将分片合并。所以,

此类场景可以考虑采用nginx提供的ip_hash策略。既能满足每个用户请求到同一台服务器,又能满足不

同用户之间负载均衡。

5.2、url_hash(通过请求url进行hash,再通过hash值选择后端server):

一般来讲,要用到url_hash,是要配合缓存命中来使用。

举一个我遇到的实例:有一个服务器集群A,需要对外提供文件下载,由于文件上传量巨大,没法存储

到服务器磁盘中,所以用到了第三方云存储来做文件存储。服务器集群A收到客户端请求之后,需要从

云存储中下载文件然后返回,为了省去不必要的网络带宽和下载耗时,在服务器集群A上做了一层临时

缓存(缓存一个月)。

由于是服务器集群,所以同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,

缓存命中率不高,以及一些资源时间的浪费。在此类场景下,为了使得缓存命中率提高,很适合使用

url_hash策略,同一个url(也就是同一个资源请求)会到达同一台机器,一旦缓存住了资源,再此收到请

求,就可以从缓存中读取,既减少了带宽,也减少的下载时间。

6、 动静分离为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原

来单个服务器的压力。

总结:

Nginx是目前比较主流的HTTP反向代理服务器(其企业版提供了基于TCP层的反向代理插件),对于构

建大型分布式web应用,具有举足轻重的作用。简单来说,nginx有2个主要的功能:动/静态资源分

离、负载均衡。

分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改