nginx原理详解 nginx集群部署详解

nginx原理详解 nginx集群部署详解1. 内容介绍Nginx的基本概念 nginx是什么,做什么事情? 反向代理 负载均衡 动静分离更多c/c++ Linux服务器高阶知识请后台私信【架构】获取分享知识点有C/C++,Linux,go

1. 内容介绍Nginx的基本概念 nginx是什么,做什么事情? 反向代理 负载均衡 动静分离更多c/c++ Linux服务器高阶知识请后台私信【架构】获取

分享知识点有C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等等。

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

2.Nginx安装、常用命令和配置文件

在Linux系统中安装nginx nginx常用命令 nginx配置文件nginx配置实例1-反向代理nginx配置实例2-负载均衡nginx配置实例3-动静分离nginx配置高可用集群nginx原理2. Nginx基本概念2.1 Nginx概述(摘自百度百科)

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

2.2 Nginx作为web服务器

Nginx可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,比如perl、php等。但是不支持java,java程序只能通过与tomcat配合完成。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验。有报告称能支持高达50000个并发。

Nginx介绍:https://lnmp.org/nginx.html

2.3 正向代理

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

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

正向代理:如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务器就称为正向代理!

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

2.4 反向代理

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

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

2.5 负载均衡

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

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

2.6 动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解决,加快解析速度。降低原来单个服务器的压力

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

3. Nginx安装

3.1 进入官网下载Nginx

官网地址:http://nginx.org/ 我选择了1.16.1版本

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

3.2 安装Nginx3.2.1. 安装pcre官网下载pcre官网地址:https://sourceforge.net/projects/pcre/我下载了10.34版本

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

把pcre的压缩文件放到Linux系统中我这里放到了usr下的src目录中

解压压缩文件

tar -xvf pcre2-10.34.tar.gz进入解压后的目录然后执行命令

./configure编译安装

make && make install安装以后使用命令查看版本号

pcre-config -version3.2.2 安装openssl和安装zlib

yum -y install make zlib zlib devel gcc-c++ libtool openssl-devel3.2.3 安装Nginx把nginx压缩包丢到linux的 /usr/src 目录下解压缩

tar -xvf nginx-1.16.1.tar.gz检查。进入解压后的目录执行命令

./configure编译安装

make && make install

安装成功之后,在 /usr 目录中会有个 local/nginx目录,在nginx中有sbin有启动脚本

启动nginx

# 进入目录cd /usr/local/nginx/sbin# 执行启动脚本./nginx查看nginx的配置文件

# 找到nginx的配置目录里的配置文件cd /usr/local/nginx/conf# 打开nginx的配置文件vim nginx.conf

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

在浏览器可以通过端口号和ip地址访问到nginx

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

3.2.4 linux端口解决

查看开放的端口号

firewall-cmd --list-all设置开放端口号

sodu firewall-cmd --add-port=80/tcp --permanent重启防火墙

firewall-cmd -reload3.3 Nginx常用命令进入nginx目录

cd /usr/local/nginx/sbin查看nginx版本号

nginx -v查看nginx是否启动

ps -ef | grep nginx停止nginx

./nginx -s stop启动nginx

./nginx重新加载nginx(比如修改了nginx的配置文件,不想重启nginx)

./nginx -s -reload3.4 Nginx的配置文件3.4.1 nginx的配置文件位置

在linux中的位置(安装目录下的conf目录下的nginx.conf文件)

/usr/local/nginx/conf/nginx.conf

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

3.4.2 nginx配置文件组成3.4.2.1 全局快

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

比如 worker_processes 1; 这个值越大,可以支持的并发处理量就越多!

3.4.2.2 events块

涉及的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接受多个网络连接,选取哪种驱动模型来处理连接请求,每个word process可以同时支持的最大连接数等等!

worker_connections 51200; # 配置服务器与用户网络连接部分3.4.2.3 http块

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

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

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

下面这一块截图就是http全局块

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

3.4.2.4 server块(属于http块)

每个http块可以有多个server块,而每个server块就相当于一个虚拟主机而每个server块也分为全局server块,以及可以同时包含多个location块。全局server块最常见的配置是本地虚拟机主机的监听配置和本地虚拟主机的名称或IP配置location块 一个server块可以配置多个location块 这块的主要作用是基于Nginx服务器接收到的请求字符串(例如server_name/uri-string),对虚拟主机名称(也可以是ip别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行!4. Nginx配置实例1-反向代理4.1 实现效果

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

4.2 准备工作

在Linux系统中安装tomcat,使用默认端口8080

下载tomcat(我这里使用tomcat8)官网地址:https://tomcat.apache.org/解压安装我这里把tomcat压缩包放到了 /usr/src目录中

tar -xvf apache-tomcat-8.5.50.tar.gz查看有无安装jdk。tomcat需要jdk

java -version启动tomcat(在tomcat的安装目录中有个bin目录,进去,然后执行命令)

./startup.sh查看tomcat日志信息(在tomcat的安装目录中有个log目录,进去,然后执行命令)

tail -f catalina.out测试浏览器输入地址访问tomcat:ip:80804.3 访问过程分析

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

4.4 具体配置在windows系统的hosts文件进行域名和ip对应关系的配置

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

在hosts文件中添加一行内容:linux的ip 域名

172.16.124.45 xxx123.com在nginx的配置文件进行请求转发的配置(反向代理配置)

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

4.5 最终测试

浏览器访问地址:xxx123.com

5. Nginx配置实例2-反向代理5.1 实现效果

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

访问 ip:9001/edu/ 直接跳转到 127.0.0.1:8080 访问 ip:9001/vod/ 直接跳转到 127.0.0.1:8081

5.2 准备工作准备2个tomcat服务器,一个8080端口,一个8081端口在原来tomcat同级目录中创建两个tomcat文件夹

mkdir tomcat8080mkdir tomcat8081

分别在每个文件夹放入tomcat的安装包,并进行解压

创建文件夹和测试页面(在tomcat的webapps目录下)5.3 具体配置找到Nginx的配置文件,进行反向代理的配置

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

2.location指令说明

该指令用于匹配URL

语法如下

location [= | ~ | ~* | ^~] uri {}= :用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求!~ :用于表示uri包含正则表达式,并且区分大小写~* :用于表示uri包含正则表达式,并且不区分大小写^~ :用于不包含正则表达式的uri前,要求nginx服务器找到标识uri和请求字字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。

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

6. Nginx配置实例-负载均衡6.1 实现效果

浏览器地址栏输入地址,负载均衡效果,平均分配到8080端口和8081端口中

6.2 准备工作准备2台tomcat服务器,一台8080,一台8081在两台tomcat里面webapps目录中,创建名字是edu文件夹,在edu文件夹中创建页面a.html,用于测试6.3 在nginx的配置文件中进行负载均衡的配置

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

6.4 测试

浏览器访问地址:ip/edu/a.html

可以看到结果是平均分配到了2个tomcat的效果!

6.5 Nginx负载均衡分配策略6.5.1 轮询(默认)

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

6.5.2 weight

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

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。比如:

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

权重为10的那个会比权重为5的那个客户端多一倍!

6.5.3 ip_hash

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

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

这样产生的结果:第一次这个用户被分配到了哪个服务端,以后他只会一直访问那个服务端!

6.5.4 fair(第三方)

按照后端服务器的响应时间来分配,响应时间短的优先分配!

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

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

7.1 相关概念

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

动静分离从目前实现角度上来讲分为2种:

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

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

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

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

7.2 准备工作

在Linux根目录中的 data 目录中准备2个文件夹 www 和 image,分别放html网页和图片。文件名字分别是 a.html 和 1.jpg

7.3 具体配置在Nginx配置文件中进行配置

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

7.4 测试

重启Nginx ip/www/a.html即可访问到那个准备的网页

8. Nginx配置实例-高可用8.1 主备模式高可用介绍

主备模式高可用 对外暴露一个虚拟ip,用户通过虚拟ip进行访问,然后虚拟ip会自动分配寻找某个Nginx,Nginx再负载均衡寻找合适的tomcat进行返回响应!如果有一个nginx宕机了,会寻找另一个Nginx,如果有一个tomcat宕机了,也会寻找另一个可用的tomcat。

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

8.2 配置高可用的准备工作

需要2台服务器在2台服务器安装Nginx在2台服务器安装keepalived8.3 在2台服务器安装keepalived

yum install keepalived -y

keepalived的安装位置:/etc/keepalived

这安装目录下有个配置文件名字叫:keepalived.conf

做主备的Nginx配置都是在这个配置文件中进行配置

8.4 完成高可用配置(主备配置)

配置 keepalived.conf 文件

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

Nginx检测脚本。(注意脚本文件名字和存放路径,要与上图中的检测脚本路径一致)

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

以上配置在两个服务器里面都需要配置的

8.5 把两台服务器上的 nginx 和 keepalived 启动

先启动nginx(进入到nginx的安装目录中的sbin目录,再执行命令)

./nginx

再启动keepalived

systemctl start keepalived service8.6 测试

在浏览器地址栏输入 虚拟ip地址 192.168.17.50

image.png

在服务器输入命令

ip a

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

停掉主服务器上的nginx和keepalived,再进行测试访问虚拟ip。发现依然可以访问。

9. Nginx配置实例(高可用配置文件详解)9.1 全局配置

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

那个是服务器的名字

在 /etc/hosts 文件中可以看到

vim /etc/hosts

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

9.2 脚本配置

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

9.3 虚拟ip配置

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

9.4 脚本文件配置

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

10. Nginx的原理解析10.1 机制介绍

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

No.1 Nginx(反向代理、负载均衡、动静分离、集群)

10.2 master-workers的机制的好处可以使用 nginx -s reload 热部署每个worker是独立的进程,如果有其中一个进程出现问题,其他work独立的,继续进行争抢,实现请求过程,不会造成服务中断!

首先,对于每个worker进程来说,独立的进程不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。其次采用独立的进程,可以让互相之间不会影响,一个进程退出后,其他进程还在工作,服务不会中断,master进程则很快启动新的 worker 进程。当然,worker进程的异常退出,肯定是程序有BUG了,异常退出,会导致当前worker上所有的请求失败,不过不会影响所有请求,所以降低了风险!

10.3 多少worker才是最合适的?

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

10.4 连接数 worker_connection发送请求,占用了worker几个连接数?答案:2个(访问静态资源直接返回)或者4个(使用tomcat访问数据库)nginx有一个master,有n个worker,每个worker支持的最大连接数是m,支持的最大并发数是多少? 普通的静态访问最大并发数:worker_connection * worker_processes / 2 而如果是作为http反向代理来说。最大并发数量应该是:worker_connection * worker_processes / 4

【版权声明】零度号提醒您:请在浏览本网站关于《nginx原理详解 nginx集群部署详解》信息时,请您务必阅读并理解本声明。本站部分内容以及图片来源于商家投稿和网络转载,如网站发布的有关的信息侵犯到您的权益,请及时与我们取得联系,邮箱:31055 30035@qq.com,我们会尊重您的决定并当天作出删除处理。

(0)
上一篇 2022年 9月 14日 12:51:53
下一篇 2022年 9月 14日 12:52:30

相关推荐

  • 微信发文件发不出去怎么回事 微信传文件传不出去

    微信发文件发不出去怎么回事 微信传文件传不出去财经网科技10月18日讯,据IT之家消息,今天早上疑似出现服务器故障,用户无法收发图片和文件,手机端和 PC 端都遇到了这个问题,并且目前 #崩了# 已经登上微博热搜第一名。据网友反映,问题表现

    2022年 10月 21日
    2
  • 如何画立体画 画一张幻觉立体画

    如何画立体画 画一张幻觉立体画手绘心脏三维技巧艺术,画心洞的手,看这幅错觉画,是不是有种错愕,觉得逼真血腥,不禁想问:你确定你不需要绷带吗?艺术源于生活,我希望你喜欢这手艺!享受和学习如何制作幻觉艺术。1.在白纸上画心形2.把心形剪下来3.

    2022年 12月 1日
    9
  • 手机玩什么游戏赚钱 手机打游戏赚钱的游戏有哪些

    手机玩什么游戏赚钱 手机打游戏赚钱的游戏有哪些大家好,这里是正惊游戏,我是正惊小弟。前不久知名移动应用数据分析公司Sensor Tower公布了2022年3月份全球手机游戏营收排行榜。分别分为总排名、AppStore排名和谷歌市场排名,到底

    2022年 10月 10日
    2
  • 三十而立真正含义是什么 二十不惑三十而立四十

    三十而立真正含义是什么 二十不惑三十而立四十那么这句话是什么意思呢?十岁不愁:儿童的天性就是喜爱玩耍,他们往往无忧无虑,然而成年人贪玩多是无所事事、荒废人生;玩者不愁愁者不玩,因愁去玩的那不叫玩、是宣泄。这个阶段的孩子,喜玩不愁是天性,但不

    2022年 9月 17日
    2
  • 记事本在哪里打开 电脑如何快速调出记事本

    记事本在哪里打开 电脑如何快速调出记事本我是做文字性工作的,自从工作以来,我就特别想找一款记事本软件,可以将工作中一些比较重要的内容记录下来,等到晚上回家的时候可以翻开看一下;可是在我工作的电脑上并没有找到记事本软件。电脑上没有记事本怎么弄

    2022年 9月 17日
    2
  • 佛山校讯通怎么取消 联通校讯通怎么取消

    佛山校讯通怎么取消 联通校讯通怎么取消有学生家长咨询:已经普及,所有学校能否取消“校讯通”业务?市教育局回复随着移动通讯的普及,使用手机处理突发事件和日常事务,成了学校和多数家长共同的意愿。移动、联通和电信三家公司都有如“校讯通”“家校通”

    2022年 9月 25日
    2
  • 公历是快的还是慢的 慢的日历是农历还是阳历

    公历是快的还是慢的 慢的日历是农历还是阳历很多人认为:农历就是阴历,公历就是阳历,但其实这种说法是不对的。下面一文看懂这四种历法到底有什么区别。想了解这四个概念,首先需要知道古人用什么来衡量时间?最直观的就是一天,基本都是用太阳的升起和落下

    2022年 10月 24日
    7
  • app页面设计制作软件 手机app界面设计用什么软件

    app页面设计制作软件 手机app界面设计用什么软件在智能手机越来越普及的今天,软件的移动端也越来越受到各大厂商的重视,因此,移动端软件的界面设计,或者叫UI设计的需求也日益旺盛。为此,很多平面设计师都开始转型投入到UI设计的领域中去,设计

    2022年 10月 7日
    2
  • 国内手机怎么注册推特账号 国内手机号收不到推特验证码

    国内手机怎么注册推特账号 国内手机号收不到推特验证码推特的最新更新使注册账号具有多种选择,让创建和登录账户更加容易,用户可以选择使用谷歌、苹果账号或是经典方式创建新账号。本篇将以苹果端为示例,分别演示如何使用Google ID和Apple

    2022年 9月 12日
    190
  • 西加一横读什么 酉加草字头加全念什么

    西加一横读什么 酉加草字头加全念什么中国的酒文化源远流长,从商夏朝代杜康造酒之说传至今,有三千多年的历史了。可以说白酒是流淌在中国人血液中“遗传基因”,也或者可称为中国人爱白酒的“遗传密码”,酒的流淌与传承,处处散发着中华礼义之邦的一种特殊

    2022年 11月 24日
    3
分享本页
返回顶部