Nginx总结(反向代理负载均衡动静分离)篇

Posted 爪洼ing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx总结(反向代理负载均衡动静分离)篇相关的知识,希望对你有一定的参考价值。

一、nginx简介

什么是Nginx

  • Nginx (“engine x”)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上ngimx,的并发能力确实在同类型的网页服务器中表现较好
  • Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率﹐能经受高负载的考验,有报告表明能支持高达50, 000个并发连接数。
  • Nginx作用:反向代理、负载均衡、动静分离等

什么是反向代理

先了解一下正向代理 :通过在客户端配置代理服务器,通过代理服务器进行互联网访问!

反向代理

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

什么是负载均衡

单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,由反向代理服务器将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡

什么是动静分离

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

二、安装Nginx

一般都是在linux下使用,这里只介绍Linux下安装!

1、安装gcc

安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:

yum install gcc-c++

2、PCRE pcre-devel 安装

PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:

yum install -y pcre pcre-devel

3、zlib 安装

zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。

yum install -y zlib zlib-devel

4、OpenSSL 安装
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。

yum install -y openssl openssl-devel

5、下载安装包

手动下载.tar.gz安装包,地址:https://nginx.org/en/download.html

上传到Linux服务器

tar -zxvf nginx-1.18.0.tar.gz  #解压
cd nginx-1.18.0   #进入nginx的目录

然后执行如下命令(按照nginx的默认配置进行安装)

./configure
make
make install   #可以替换为make & make install

安装完成,此时我们的就会发现在我们的user/local/nginx的目录下存在这么一个sbin的目录,里面是nginx的启动脚本

执行./nginx ,nginx就会启动2个进程!

接下来,我们进入到nginx的conf目录下,查看一个nginx的配置文件nginx.conf

然后我们的通过ip+80端口可以直接测试访问Nginx是否启动,启动成功!(hh,记得把自己的服务器的防火墙打开)

扩展

查询放行的端口:
firewall-cmd --zone=public --list-ports

新增放行端口(比如8080):
firewall-cmd --zone=public --add-port=8080/tcp --permanent

切记要刷新:
firewall-cmd --reload

三、Nginx常用命令

使用Nginx的相关命令前提条件 :必须进入nginx的目录 /user/local/nginx/sbin

具体命令如下 :

  • 查看Nginx的版本号

    [root@songqixiang sbin]# ./nginx -v   #查看版本号
    nginx version: nginx/1.20.2
    
  • 启动Nginx

    [root@songqixiang sbin]# ./nginx
    [root@songqixiang sbin]# ps -ef | grep nginx
    root      2027     1  0 17:38 ?        00:00:00 nginx: master process ./nginx
    nobody    2028  2027  0 17:38 ?        00:00:00 nginx: worker process
    root      2034 28070  0 17:38 pts/0    00:00:00 grep --color=auto nginx
    
  • 关闭Nginx

    [root@songqixiang sbin]# ./nginx -s stop  #停止nginx
    [root@songqixiang sbin]# ps -ef | grep nginx
    root      1822 28070  0 17:36 pts/0    00:00:00 grep --color=auto nginx   #nginx相关进程停了,这个是非必要的!
    
  • 重新加载Nginx配置文件

    #无需重启,而且重新加载nginx的配置文件
    [root@songqixiang sbin]# ./nginx -s reload
    

四、Nginx的配置文件

1、Nginx配置文件的位置

[root@songqixiang conf]# pwd
/usr/local/nginx/conf

2、配置文件中的内容(包含三部分)

一、全局块:配置服务器整体运行的配置指令

从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用

户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。

比如上面第一行配置的:

这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备 的制约

二、events块:影响 Nginx 服务器与用户的网络连接

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,

是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 wordprocess 可以同时支持的最大连接数等。

上述例子就表示每个 work process 支持的最大连接数为 1024.

三、http块:这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

需要注意的是:http 块也可以包括 http 全局块server 块

①、http 全局块

http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

②、server块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本 ,每个 http 块可以包括多个 server块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块

全局 server 块

最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。

location 块

一个 server 块可以配置多个 location 块。

这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称

(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓

存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

location指令说明

五、Nginx的配置实例

实例1:Nginx的反向代理

打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转到 liunx 系统 tomcat 主页

1、先准备tomcat,然后通过tar -解压

[root@songqixiang sqx]# tar -xvf apache-tomcat-9.0.46.tar.gz 

2、进入apache-tomcat-9.0.46的bin目录执行

./startup.sh  #启动我们的Tomcat

3、去到日志查看是否启动成功!

测试:ip + 8080端口:成功!(自己的域名备案了,所以就hh)

Tomcat配置完毕,接下来就是我们的Nginx的相关配置了!

梳理一下思路:

具体配置

第一步 :在 windows 系统的 C:\\Windows\\System32\\drivers\\etc\\host 文件进行域名和 ip 对应关系的配置

原理:当我们输入一个域名的时候,首先会根据本地host文件去解析ip,如果host不存在那么就会去DNS服务器去解析!

配置成功!

第二步:找到nginx.conf进行如下配置(反向代理配置)

第三步:启动Nginx即可,访问www.123.com即可

完成

实例2:Nginx的反向代理

使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中

  • nginx 监听端口为 9001,
  • 访问 http://192.168.17.129:9001/edu/ 直接跳转到 127.0.0.1:8080
  • 访问 http:// 192.168.17.129:9001/vod/ 直接跳转到 127.0.0.1:8081

准备2个Tomcat:分别新建2个文件夹并将tomcat复制进去

1、进入tomcat8080文件夹,解压并启动

tar -xvf apache-tomcat-9.0.46.tar.gz  #解压

然后启动默认就是8080端口

2、进入tomcat8081文件夹,解压并启动

注意:改个配置文件将端口号改为8081,需要修改的配置文件是server.xml

需要修改如下位置 :


\\

最后记得阿里云的安全组和服务器的防火墙都打开!

测试:去分别启动2个Tomcat

启动成功!

创建文件夹和测试的页面

准备好2个a.html,分别放入2个tomcat的目录下!

在nginx.conf配置反向代理效果

在配置文件加上如下真么一段:

解释:nginx监听自身9001端口,一旦被访问,

  • 如果请求路径中含有edu ,则转到tomcat的8080
  • 如果请求路径中含有vod ,则转到tomcat的8081

注意:记得开端口9001、8081、8080等

测试

实例3:Nginx的负载均衡

浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,负载均衡效果,平均 8080和 8081 端口中

准备:同样是两台Tomcat服务器,让这两台服务器都存在edu这个文件夹而且都存在a.html

测试一下:

去到nginx.conf进行一些负载均衡的一些配置

http块进行负载均衡配置和服务名,在server块中进行请求配置

我们去测试即可

测试成功!

Nginx 分配服务器策略

第一种 轮询(默认)

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

第二种 加权轮询

具体配置 : weight 代表权重默认为 1,权重越高被分配的客户端越多

ustream myserver
	server 60.205.180.178 weight=10 ;
	server 60.205.180.178 weight=10 ; 

第三种 ip_hash *

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决session共享的问题

具体配置 : 也就是一个ip访问就指定一台服务器不可变

ustream myserver
	ip_hash;   #开启iphash配置
	server 60.205.180.178 weight=10 ;
	server 60.205.180.178 weight=10 ; 

第四种 fair(第三方)

根据服务器的响应时间分配,看谁的响应时间短就给谁分配

具体配置

ustream myserver
	server 60.205.180.178 weight=10 ;
	server 60.205.180.178 weight=10 ; 
	fair;   #开启fair分配

实例4:Nginx的动静分离

什么是动静分离?

Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态

请求跟静态请求分开,可以理解成使用 Nginx处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种,

  • 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
  • 另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。

通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和

流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,

所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置

3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码

304,如果有修改,则直接从服务器重新下载,返回状态码 200。

准备工作:在 liunx 系统中准备静态资源,用于进行访问

在根目录创建2个文件夹iamge(放入一个图片)、www(放入一个HTML文件)


修改我们的nginx.conf的相关配置

更新一下配置:

最终测试

我们其中有一行配置:autoindex on 表示目录以文件列表的形式展示


重点是添加 location,最后检查 Nginx 配置是否正确即可,然后测试动静分离是否成功,之需要删除后端 tomcat服务器上的某个静态文

件,查看是否能访问,如果可以访问说明静态资源 nginx 直接返回了,不走后端 tomcat 服务器

收工

关于Nginx高可用相关文章以后再更新(暂时用不到)!

以上是关于Nginx总结(反向代理负载均衡动静分离)篇的主要内容,如果未能解决你的问题,请参考以下文章

聊一聊nginx负载均衡+正/反向代理+动静分离

Nginx代理——正向反向代理,动静分离和负载均衡

图文详解 配置Nginx+Tomcat负载均衡动静分离集群

Nginx+Tomcat负载均衡及动静分离

Nginx入门教程-简介安装反向代理负载均衡动静分离使用实例

项目实战02:nginx 反向代理负载均衡动静分离和缓存的实现