热门课程

免费试听

上课方式

开班时间

当前位置: 首页 -   文章 -   新闻动态 -   正文

Nginx基础知识

知了堂姐
2024-07-09 11:12:24
0

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个主要的功能:动/静态资源分离、负载均衡。

大家都在看

铁三赛第3期公开课渗透攻防实战系列课报名已开启

2024-07-09 浏览次数:0

Java代码如何对架构改进?

2024-07-09 浏览次数:0

喜讯!前端培训学员顺利拿到offer

2024-07-09 浏览次数:0

CISP证书含金量高吗?有必要考CISP证书吗?

2024-07-09 浏览次数:0

2023年网络安全十大发展趋势发布

2024-07-09 浏览次数:0

祝贺知了堂嘉年华活动圆满举行

2024-07-09 浏览次数:0
最新资讯
Nginx基础知识 Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,...