1. Nginx简介

1.1. 什么是Nginx和可以做什么事情?

Nginx 是一个高性能的HTTP和反向代理的服务器,特点是占用内存小,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

Nginx专为性能优化而开发,性能是其最重要的考量,事实上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。

1.2. 正向代理

在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。

nginx学习笔记 - 图1

1.3. 反向代理

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

nginx学习笔记 - 图2

1.4. 负载均衡

客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。

这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?

我们首先想到的可能是升级服务器的配置,比如提高CPU执行频率,加大内存等提高机器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能满足日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能够满足需求的。那么怎么办呢?

上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡

nginx学习笔记 - 图3

1.5. 动静分离

传统的模式是把静态资源(例如html、css、js等)和动态资源(jsp、servlet)放到同一个服务器tomcat中,这种方式有局限性,比如说现在请求静态资源和请求动态资源都去请求同一个服务器,这会给单个服务器带来更大的压力。所以针对这种问题就想了一种解决方案,这个方案就是动静分离。动静分离就是为了加快网站的解析速度,把动态资源和静态资源由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力

nginx学习笔记 - 图4

2. Nginx的安装

在linux系统中安装nginx

2.1. 打开虚拟机,使用远程连接工具连接 linux 操作系统

2.2. 到 nginx 官网下载软件

http://nginx.org/

2.3. 在安装nginx之前,需要安装nginx的相关依赖

2.3.1. 安装pcre依赖

第1步:联网下载pcre压缩文件依赖

  1. $ wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz

第2步:解压压缩文件

  1. $ tar -xvf pcre-8.37.tar.gz

第3步:进入解压之后的目录,执行./configure

  1. $ cd pcre-8.37
  2. $ ./configrue

第4步:使用命令make && make install 把文件编译并且安装

  1. $ make && make install

安装完成后可以使用命令pcre-config —version查看当前安装的pcre的版本号

  1. $ pcre-config --version

nginx学习笔记 - 图5

2.3.2. 安装openssl,zlib、gcc依赖

使用yum的方式安装

  1. $ yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

2.3.3. 安装nginx

第1步:把我们下载的nginx的压缩文件nginx-1.12.2.tar.gz放到Linux中

第2步:解压缩nginx-1.12.2.tar.gz

  1. $ tar -zxvf nginx-1.12.2.tar.gz

第3步:进入解压缩目录,执行./configure

  1. $ cmd nginx-1.12.2
  2. $ ./configure

第4步:使用命令make && make install 把文件编译并且安装

  1. $ make && make install

第5步:安装成功之后进入/usr/local/目录,会多出来一个nginx目录,在nginx目录下有一个sbin目录中,它里面存放了nginx的启动脚本,这个启动脚本可以启动nginx服务

  1. $ cd /usr/local/nginx/sbin/
  2. $ ./nginx

使用命令ps -ef | grep nginx可以查看nginx是否已经启动

  1. $ ps -ef | grep ngix

nginx学习笔记 - 图6

进入/usr/local/nginx/conf/目录下,打开nginx.conf文件,在里面可以查看nginx后台进程监听的默认端口号是80端口

打开浏览器输入http://ip:port/访问nginx,如果看到以下页面说明安装成功,如果没有可能是因为你的防火墙没有开放nginx监听的端口号,可以查看后续步骤在防火墙中开发nginx监听的端口号

nginx学习笔记 - 图7

可以使用命令firewall-cmd --list-all查看防火墙开放的所有端口

  1. $ firewall-cmd --list-all

nginx学习笔记 - 图8

使用以下命令让防火墙开放8001端口

  1. $ firewall-cmd --permanent --add-port=8001/tcp

使用以下命令重写加载防火墙才能生效

  1. $ firewall-cmd --reload

再次使用以下命令查看防火墙开发的端口号的列表

  1. $ firewall-cmd --list-all

3. Nginx操作的常用命令

使用Nginx命令的前提条件是:必须进入nginx的目录/usr/local/nginx/sbin/里面去

3.1. 查看nginx版本号

  1. $ cd /usr/local/nginx/sbin/
  2. $ ./nginx -v

nginx学习笔记 - 图9

3.2. 启动nginx

  1. $ ./nginx

nginx学习笔记 - 图10

3.3. 关闭nginx

  1. $ ./nginx -s stop

nginx学习笔记 - 图11

3.4. 重新加载nginx

可以通过重新加载nginx的方式让修改后的配置文件生效(热部署的方式,不需要重写启动nginx就能让修改完的配置文件进行生效)

  1. $ ./nginx -s reload

4. Nginx的配置文件

4.1. nginx配置文件的位置

  1. $ cd /usr/local/nginx/conf/

nginx学习笔记 - 图12

4.2. nginx配置文件组成

nginx的配置文件由三部分组成

  • 全局块
  • events块
  • http块

4.2.1. 全局块

全局快是从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令。主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。

比如

  1. worker_processes 1;

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

4.2.2. events块

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,比如

  1. events {
  2. #表示支持的最大连接数
  3. worker_connections 1024;
  4. }

4.2.3. http块

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

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

a. http全局块

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

b. server块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。 而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

全局 server 块

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

location块

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

这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行

5. Nginx配置实例-反向代理实例1

5.1. 需要实现的效果

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

5.2. 准备工作

5.2.1. 在linux系统中安装tomcat,使用默认端口8080

第1步:把tomcat的安装压缩包放到linux系统中

第2步:解压缩apache-tomcat-xx.xx.xx.tar.gz

  1. $ tar -zxvf apache-tomcat-xx.xx.xx.tar.gz

第3步:解压后进入到tomcat的bin目录中去,启动tomcat

  1. $ cd apache-tomcat-xx.xx.xx/bin/
  2. $ ./startup.sh

第4步:让防火墙对外开发8080端口

  1. $ firewall-cmd --permanent --add-port=8080/tcp
  2. $ friewall-cmd --reload

可以用以下命令查看一下是否开放了8080端口

  1. $ firewall-cmd --list-all

第5步:在windows系统中通过浏览器访问tomcat服务器,看是否能正常访问

http://ip:8080/

5.3. 访问过程的分析

nginx学习笔记 - 图13

5.4. 具体配置

5.4.1. 在 windows 系统的host文件进行域名和ip对应关系的配置

nginx学习笔记 - 图14

  1. #在配置文件中加上下面这行配置
  2. 192.168.3.129 www.123.com

5.4.2. 在 nginx进行请求转发的配置(反向代理配置)

进入/usr/local/nginx/conf/目录修改nginx的配置文件

  1. $ cd /usr/local/nginx/conf/
  2. $ vim nginx.conf

nginx学习笔记 - 图15

5.5. 最终测试

修改完配置文件需要进入nginx的sbin目录重新启动nginx进程让修改生效

  1. $ cd /usr/local/nginx/sbin/
  2. $ ./nginx

nginx学习笔记 - 图16

6. Nginx配置实例-反向代理实例2

6.1. 需要实现的效果

使用 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

6.2. 准备工作

6.2.1. 准备两个tomcat服务器,一个8080端口,一个8081端口

第1步:进入/usr/local/创建文件夹tomcat8080、tomcat8081

  1. $ mkdir tomcat8080
  2. $ mkdir tomcat8081

第2步:把tomcat压缩包放到tomcat8080目录和tomcat8081目录中,然后分别解压缩

第3步:把之前启动的tomcat进程关闭

可以使用以下命令查看tomcat的进程号

  1. $ ps -ef | grep tomcat

然后使用以下命令杀死之前启动的tomcat进程

  1. $ kill -9 tomcat进程号

nginx学习笔记 - 图17

第4步:把tomcat8081目录中的tomcat的端口号改成8081

进入tomcat8081的tomcat的配置文件中

  1. $ cd /usr/local/tomcat8081/conf
  2. $ vim server.xml

修改server.xml配置文件中的以下内容

nginx学习笔记 - 图18

nginx学习笔记 - 图19

nginx学习笔记 - 图20

第5步:分别进入tomcat8080目录和tomcat8081目录,启动两个tomcat

第6步:测试

使用浏览器分别访问http://ip:8080/和http://ip:8081/,看是否能看到tomcat的欢迎页面

nginx学习笔记 - 图21

nginx学习笔记 - 图22

6.2.2. 创建文件夹和测试页面

在tomcat8080中的tomcat的webapps目录下创建一个edu目录,然后进入edu创建一个a.html

  1. <html>
  2. <head>
  3. <title>tomcat8080</title>
  4. </head>
  5. <body>
  6. <h1>
  7. 8080!!
  8. </h1>
  9. </body>
  10. </html>

在tomcat8081中的tomcat的webapps目录下创建一个vod目录,然后进入vod创建一个a.html

  1. <html>
  2. <head>
  3. <title>tomcat8081</title>
  4. </head>
  5. <body>
  6. <h1>
  7. 8081!!
  8. </h1>
  9. </body>
  10. </html>

分别测试http://ip:8080/edu/a.html和http://ip:8081/vod/a.html

nginx学习笔记 - 图23

nginx学习笔记 - 图24

6.3. 具体配置

6.3.1. 找到nginx配置文件,进行反向代理配置

  1. $ cd /usr/local/nginx/conf/

在nginx.conf添加如下内容

  1. server {
  2. listen 9001;
  3. server_name 192.168.3.129;
  4. location ~ /edu/ {
  5. proxy_pass http://127.0.0.1:8080;
  6. }
  7. location ~ /vod/ {
  8. proxy_pass http://127.0.0.1:8081;
  9. }
  10. }

6.3.2. 重新启动nginx服务

  1. $ cd /usr/local/nginx/sbin/
  2. $ ./nginx -s stop
  3. $ ./nginx

6.3.3. 开放对外访问的端口号 9001和8080和8081

可以使用如下命令查看防火墙已经开发的端口号

  1. $ firewall-cmd --list-all

可以使用如下命令让防火墙开启9001端口和8080端口和8081端口

  1. $ firewall-cmd --permanent --add-port=8081/tcp
  2. $ firewall-cmd --permanent --add-port=8080/tcp
  3. $ firewall-cmd --permanent --add-port=9001/tcp

然后使用如下命令让防火墙生效

  1. $ firewall-cmd --reload

6.4. 最终测试

分别访问http://ip:9001/edu/a.html和http://ip:9001/vod/a.html

nginx学习笔记 - 图25

nginx学习笔记 - 图26

6.5. location指令说明

该指令用于匹配 URL。

语法如下:

  1. location [ = | ~ | ~* | ^~ ] uri {
  2. }

1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。

2、~:用于表示 uri 包含正则表达式,并且区分大小写

3、~:用于表示 uri 包含正则表达式,并且*不区分大小写

4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。

**注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~ 标识。

7. Nginx配置实例-负载均衡

7.1. 需要实现的效果

浏览器地址栏输入地址http://ip/edu/a.html,实现均衡效果,平均分担到8080端口和8081端口中

7.2. 准备工作

7.2.1. 准备两个tomcat服务器,一个8080端口,一个8081端口

7.2.2. 在两台tomcat服务器里面的webapps目录中创建edu文件夹,在edu文件夹中创建a.html,用于测试

7.3. 具体配置

7.3.1. 找到nginx配置文件,进行负载均衡的配置

  1. $ cd /usr/local/nginx/conf/

在nginx.conf中进行相应的配置

在http块中添加如下配置,配置服务器的列表

  1. upstream myserver {
  2. server 192.168.17.129:8080;
  3. server 192.168.17.129:8081;
  4. }

在server块中修改如下配置

nginx学习笔记 - 图27

7.3.2. 重启nginx服务让修改生效

  1. $ cd /usr/local/nginx/sbin/
  2. $ ./nginx -s stop
  3. $ ./nginx

7.4. 最终测试

在浏览器输入http://192.168.17.129/edu/a.html会发现每次刷新访问后都会均匀的分担到不同的tomcat服务器中

7.5. nginx分配服务器策略

随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个很陌生的话题, 顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品, 很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎, nginx 就是其中的一个,在 linux 下有 Nginx、LVS、Haproxy 等等服务可以提供负载均衡服 务,而且 Nginx 提供了几种分配方式(策略):

7.5.1. 第一种:轮询(默认)

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

7.5.2. 第二种:weight

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

可以在http块中的upstream中进行配置

例如

  1. upstream myserver {
  2. server 192.168.17.129:8080 weight=5;
  3. server 192.168.17.129:8081 weight=10;
  4. }

7.5.3. 第三种:ip_hash

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

可以在http块中的upstream中进行配置

例如:

  1. upstream myserver {
  2. ip_hash;
  3. server 192.168.17.129:8080;
  4. server 192.168.17.129:8081;
  5. }

7.5.4. fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

可以在http块中的upstream中进行配置

例如:

  1. upstream myserver {
  2. server 192.168.17.129:8080;
  3. server 192.168.17.129:8081;
  4. fair;
  5. }

8. Nginx配置实例-动静分离

8.1. 什么是动静分离

Nginx 动静分离简单来说就是把动态请求跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种, 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;

另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。

通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数可以设置浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可, 所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件, 不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送 一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,如果有修改,则直接从服务器重新下载,返回状态码 200。

nginx学习笔记 - 图28

8.2. 准备工作

8.2.1. 在linux系统中准备静态资源,用于进行访问

在根目录下创建data目录,进入data目录,在data目录中创建www目录和image目录

  1. $ cd /
  2. $ mkdir data
  3. $ cd data
  4. $ mkdir www
  5. $ mkdir image

进入www目录,创建a.html

a.html

  1. <html>
  2. <head>
  3. <title>test</title>
  4. </head>
  5. <body>
  6. <h1>
  7. test html!!
  8. </h1>
  9. </body>
  10. </html>

进入image目录,上传一张图片到这个目录

8.3. 具体配置

8.3.1. 找到nginx配置文件,进行负载均衡的配置

  1. $ cd /usr/local/nginx/conf/

在nginx.conf中进行如下的配置

nginx学习笔记 - 图29

autoindex on;表示列出当前文件夹中的内容

8.3.2. 重启nginx服务让修改生效

  1. $ cd /usr/local/nginx/sbin/
  2. $ ./nginx -s stop
  3. $ ./nginx

8.4. 最终测试

在浏览器中输入如下地址

http://192.168.3.129/image/test.jpg

nginx学习笔记 - 图30

因为nginx的配置文件中配置了autoindex on

nginx学习笔记 - 图31

在浏览器中输入如下地址

http://192.168.3.129/www/a.html

nginx学习笔记 - 图32

9. Nginx配置高可用的集群

9.1. 什么是nginx高可用

nginx学习笔记 - 图33

nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。

为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务,当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。

配置Nginx的高可用集群

  • 需要两台nginx服务器
  • 需要keepalived
  • 需要虚拟ip

9.2. 配置高可用的准备工作

9.2.1. 需要两台服务器

两台服务器的IP地址分别是:192.168.17.129和192.168.17.131

9.2.2. 在两台服务器安装nginx

步骤可以参照之前的内容

9.2.3. 在两台服务器中安装keepalived

使用yum命令进行安装

  1. $ yum install keepalived -y

可以使用如下命令查看是否安装上了keepalived

  1. $ rpm -qa | grep keepalived

安装成功之后,会在/etc/目录下会生成keepalived目录,里面有一个keepalived.conf的配置文件

9.3. 完成高可用配置(主从配置)

9.3.1. 找到keepalived的配置文件keepalived.conf,进行主从配置

a. 进入/etc/keepalived/目录

  1. $ cd /etc/keepalived/
  2. $ vim keepalived.conf

b. 修改keepalived.conf

  1. global_defs {
  2. notification_email {
  3. acassen@firewall.loc
  4. failover@firewall.loc
  5. sysadmin@firewall.loc
  6. }
  7. notification_email_from Alexandre.Cassen@firewall.loc
  8. smtp_server 192.168.17.129
  9. smtp_connect_timeout 30
  10. router_id LVS_DEVEL
  11. }
  12. vrrp_script chk_http_port {
  13. script "/usr/local/src/nginx_check.sh"
  14. interval 2 #(检测脚本执行的间隔)
  15. weight 2
  16. }
  17. vrrp_instance VI_1 {
  18. state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
  19. interface ens33 //网卡
  20. virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
  21. priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
  22. advert_int 1
  23. authentication {
  24. auth_type PASS
  25. auth_pass 1111
  26. }
  27. virtual_ipaddress {
  28. 192.168.17.50 // VRRP H 虚拟地址
  29. }
  30. }

c. 在/usr/local/src 添加检测脚本

nginx_check.sh

  1. #!/bin/bash
  2. A=`ps -C nginx –no-header |wc -l`
  3. if [ $A -eq 0 ];then
  4. /usr/local/nginx/sbin/nginx
  5. sleep 2
  6. if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
  7. killall keepalived
  8. fi
  9. fi

然后给nginx_check.sh添加可执行权限

  1. $ chmod u+x nginx_check.sh

d. 配置完主服务器后,再配置备份服务器

e. 把“两台”服务器上nginx和keepalived启动

先启动nginx

  1. $ cd /usr/local/nginx/sbin/
  2. $ ./nginx -s stop
  3. $ ./nginx

然后启动keepalived

  1. $ systemctl start keepalived.service

启动之后使用如下命令查看keepalived进程是否已经启动

  1. ps -ef | grep keepalived

9.4. 最终测试

在浏览器地址栏直接输入虚拟ip地址192.168.17.50,如果出现以下页面证明我们的虚拟ip的绑定是正确的

nginx学习笔记 - 图34

在主服务器输入命令ip a,发现主服务器已经和虚拟ip进行绑定

nginx学习笔记 - 图35

把主服务器(192.168.17.129)nginx停止和keepalived停止

  1. $ systemctl stop keepalived.service
  2. $ cd /usr/local/nginx/sbin/
  3. $ ./nginx -s stop

关闭之后使用如下命令查看keepalived进程是否已经关闭

  1. $ ps -ef | grep keepalived

然后再次在浏览器地址栏输入地址http://192.168.17.50/,会发现即使把主服务器停止,它仍然可以访问

nginx学习笔记 - 图36

在备份服务器输入命令ip a,发现备份服务器已经和虚拟ip进行绑定

nginx学习笔记 - 图37

9.5. keepalived.conf配置文件详解

  1. #全局配置
  2. global_defs {
  3. notification_email {
  4. acassen@firewall.loc
  5. failover@firewall.loc
  6. sysadmin@firewall.loc
  7. }
  8. notification_email_from Alexandre.Cassen@firewall.loc
  9. smtp_server 192.168.17.129
  10. smtp_connect_timeout 30
  11. #路由id,这里的LVS_DEVEL实际上是服务器的名称,它是在/etc/hosts文件中配置的
  12. router_id LVS_DEVEL
  13. }
  14. #检测脚本的配置
  15. vrrp_script chk_http_port {
  16. script "/usr/local/src/nginx_check.sh"
  17. #(检测脚本执行的间隔)
  18. interval 2
  19. #表示权重,当这个服务器宕机之后,可以改变这个服务器的权重
  20. weight 2
  21. }
  22. #虚拟ip的配置
  23. vrrp_instance VI_1 {
  24. #表示这个服务器是主服务器还是备份服务器,如果是主服务器就填MASTER,如果是备份服务器就填BACKUP
  25. state BACKUP
  26. #想绑定的服务器网卡名称,可以使用ifconfig命令查看当前服务器的有哪些网卡
  27. interface ens33
  28. # 主、备机的 virtual_router_id 必须相同
  29. virtual_router_id 51
  30. # 主、备机取不同的优先级,主机值较大,备份机值较小
  31. priority 90
  32. #时间间隔,表示每隔多长时间发送一个心跳检测一下当前服务器是不是还存活
  33. advert_int 1
  34. #表示权限校验的方式
  35. authentication {
  36. #PASS表示使用密码校验
  37. auth_type PASS
  38. #校验的密码是1111
  39. auth_pass 1111
  40. }
  41. #表示虚拟ip的地址,这里可以绑定多个虚拟ip
  42. virtual_ipaddress {
  43. 192.168.17.50 //
  44. }
  45. }

10. Nginx原理解析

10.1. master和worker

nginx学习笔记 - 图38

nginx学习笔记 - 图39

10.2. worker是如何进行工作的

nginx学习笔记 - 图40

首先发送请求,先到nginx中的master进程,master进程会把请求下发到下面的worker进程,worker通过争抢机制得到这个请求,然后它可以进行反向代理,让tomcat完成后续的操作

10.3. 一个master和多个worker有哪些好处

(1)可以使用nginx -s reload热部署,利于nginx进行热部署操作

(2)每个woker都是一个独立的进程,如果有其中的一个 woker出现问题,其他woker仍然可以继续进行争抢,实现请求过程,不会造成服务中断。

10.4. 设置多少个woker才是合适的

Nginx 同 redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进 程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话 下。每个 worker 的线程可以把一个 cpu 的性能发挥到极致。所以 worker 数和服务器的 cpu 数相等是最为适宜的。设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗。

10.5. 连接数 worker_connection

第一个:发送一个请求,占用了 woker 的几个连接数?

答案:2 或者 4 个

第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的最大并发数是多少?

worker_connections表示每个worker支持的最大连接数,worker_processes表示worker进程的个数

普通的静态访问最大并发数是: worker_connections * worker_processes /2,

而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4