• nginx——复习



    nginx是什么

    nginx是一个高性能的http和反向代理web服务器 。中国大陆很多网站都在使用nginx,例如百度、京东、新浪、网易、腾讯、淘宝等。nginx占用内存少,并发能力强 。在同类型的web服务器中,nginx的并发性能表现较好。

    nginx专为性能优化而开发,非常注重效率,能经受住高负载的考验。

    Nginx支持热部署。它的启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动 。你还能够在不间断服务的情况下,对软件版本进行进行升级。

    更详细的介绍:https://lnmp.org/nginx.html

    nginx正向代理

    正向代理代理的是客户端,反向代理代理的是服务器。
    nginx不仅可以做反向代理,实现负载均衡。还可以做正向代理来进行上网等功能。
    正向代理:
    如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问。这种代理服务就称为正向代理。

    比如用户想要访问www.google.com,但是是无法直接访问的。则需要中间经过一个代理服务器www.abc.com,由代理服务器访问www.google.com,在客户端需要对代理服务器做好配置。客户端(浏览器)配置代理服务器,通过代理服务器进行网络访问
    在这里插入图片描述

    nginx反向代理

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

    在这里插入图片描述

    负载均衡

    简单的架构模式:客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕之后,再将结果返回给客户端。
    这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是合适的。但是随着信息数量的不断增长,访问量和数据量飞速增长,以及系统业务复杂度不断增加,这种架构会造成服务器对客户的请求响应日益缓慢,并发量特别大的时候容易造成服务器直接崩溃。如何解决这种情况?
    单个服务器解决不了,就增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。

    在这里插入图片描述

    动静分离

    为了加快网站的解析速度,可以把动态页面(jsp、servlet)和静态页面(html、css)由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
    静态资源服务器用于处理静态资源,
    tomcat服务器可以处理动态资源
    将静态资源和动态资源分开部署
    在这里插入图片描述

    在Linux上安装nginx

    1、官网下载: http://nginx.org/2017.html
    nginx-1.21.2.tar.gz

    2、安装nginx依赖包pcre-8.37.tar.gz
    进入Linux目录,下载包:
    wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
    tar -zxf pcre-8.37.tar.gz

    进入解压之后的目录,执行 ./configure
    执行编译并安装make && make install
    查看pcre安装的版本: pcre-config --version

    3、安装其他依赖
    yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

    4、安装nginx
    解压: tar -zxf nginx-1.21.2.tar.gz
    进入解压目录:
    cd nginx-1.21.2
    ./configure

    make && make install
    默认安装路径为**/usr/local/nginx** ,
    /usr/local/nginx/sbin 下有启动脚本

    5、启动nginx
    cd /usr/local/nginx/sbin
    ./nginx
    ps -ef | grep nginx 查看已经启动的nginx进程

    6、访问nginx,默认是80端口
    浏览器输入主机IP即可

    注意:防火墙问题
    查看开放的端口号
    firewall-cmd --list-all
    设置开放的端口号
    firewall-cmd --add-service=http –permanent
    firewall-cmd --add-port=80/tcp --permanent
    重启防火墙
    firewall-cmd –reload

    nginx常用命令

    使用nginx命令前,需要先进入nginx的目录,即: cd /usr/local/nginx/sbin
    查看nginx的版本号: ./nginx -v
    启动nginx服务: ./nginx
    停止nginx服务: ./nginx -s stop
    不重启服务器,重新加载nginx配置文件/usr/local/nginx/conf/nginx.conf:./nginx -s reload

    nginx的配置文件

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

    在这里插入图片描述

    nginx的配置文件组成:

    第一部分: 全局块

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

    比如,配置的第一行:
    worker_processes 1;
    这是nginx服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多。但是会受到硬件、软件等设备的制约。

    在这里插入图片描述

    第二部分:event块

    events块涉及的指令主要影响nginx服务器与用户的网络连接 ,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个work process可以同时支持的最大连接数等。
    比如,
    worker_connections 1024;
    表示支持的最大连接数为 1024。
    这部分的配置对nginx的性能影响较大,在实际中应该灵活配置。
    在这里插入图片描述

    第三部分:http块

    这算是nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方的配置都在这里。
    http块也可以包含http全局块、server块。

    http全局块

    http全局块配置的指令包括文件引入、mime-type定义、日志自定义、连接超时时间、单链接请求数上限等。
    在这里插入图片描述

    server块

    这块和虚拟主机有密切联系,虚拟主机从用户角度看,和每一台独立的硬件主机是完全一样的。

    每个http块可以包含多个server块,而每个server块就相当于一个虚拟主机。

    每个server块也可以分为全局server块,以及同时包含多个location块。

    1、全局server块
    最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称和IP配置
    2、location块
    一个server块可以配置多个location块

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

    在这里插入图片描述

    nginx配置反向代理实例1

    1、实现效果
    (1)打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转到 liunx 系统 tomcat 主页
    面中
    2、准备工作
    (1)在 liunx 系统安装 tomcat,使用默认端口 8080

    • tomcat 安装文件放到 liunx 系统中,解压
    • 进入 tomcat 的 bin 目录中,./startup.sh 启动 tomcat 服务器

    tar -zxf apache-tomcat-7.0.70.tar.gz
    java -version 查看jdk
    cd apache-tomcat-7.0.70
    cd bin
    ./startup.sh 启动tomcat服务器

    cd apache-tomcat-7.0.70/logs
    tail -f catalina.out 实时查看tomcat日志

    (2)对外开放访问的端口
    firewall-cmd --add-port=8080/tcp --permanent
    firewall-cmd --reload

    查看已经开放的端口号:
    firewall-cmd --list-all

    (3)测试,Windows浏览器输入虚拟机IP:8080,能查看到tomcat服务正常运行
    在这里插入图片描述

    3、执行过程分析
    Windows客户端请求访问www.123.com,将该请求发送给nginx反向代理服务器,由nginx转发到tomcat服务器中。
    tomcat服务器对外是隐藏的。对外暴露的是nginx反向代理服务器。Windows客户端需要通过nginx才能反向代理到tomcat服务器。

    在客户端需要做域名解析。最终实现的效果是Windows客户端在浏览器输入www.123.com,回车显示tomcat页面。
    在这里插入图片描述4、具体配置

    第一步 在 windows 系统的 host 文件进行域名和 ip 对应关系的配置
    在这里插入图片描述
    (1)添加内容在 host 文件中
    在这里插入图片描述
    第二步 在 nginx 进行请求转发的配置(反向代理配置)

    设置当访问192.168.17.129:80时,转发到http://127.0.0.1:8080
    在这里插入图片描述
    5、测试
    启动nginx
    cd /usr/local/nginx/sbin
    ./nginx

    Windows客户端在浏览器输入www.123.com,能被反向代理到tomcat服务页面
    在这里插入图片描述

    nginx配置反向代理实例2

    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

    2、准备工作
    (1)准备两个 tomcat 服务器,一个 8080 端口,一个 8081 端口
    关闭之前开启的tomcat
    ps -ef | grep tomcat
    kill -9 pid

    mkdir tomcat8080
    mkdir tomcat8081

    //将tomcat压缩包拷贝到新建的两个文件夹
    cp apache-tomcat -7.0.70.tar.gz tomcat8080
    cp apache-tomcat -7.0.70.tar.gz tomcat8081

    cd tomcat8080
    tar -zxf apache-tomcat-7.0.70.tar.gz
    cd apache-tomcat-7.0.70
    cd bin
    ./startup.sh

    cd tomcat8081
    tar -zxf apache-tomcat-7.0.70.tar.gz
    cd apache-tomcat-7.0.70
    cd conf
    vim server.xml 修改端口
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    cd …
    cd bin
    ./startup.sh
    在浏览器输入测试,192.168.17.129:8080 和192.168.17.129:8081均能看到tomcat页面

    (2)创建文件夹和测试页面
    mkdir tomcat8080/apache-tomcat-7.0.70/webapps/edu
    echo

    8080!!

    >> tomcat8080/apache-tomcat-7.0.70/webapps/edu/a.html
    测试:
    在这里插入图片描述
    mkdir tomcat8080/apache-tomcat-7.0.70/webapps/vod
    echo

    8081!!

    >> tomcat8080/apache-tomcat-7.0.70/webapps/vod/a.html

    3、具体配置
    (1)找到 nginx 配置文件,进行反向代理配置
    ~ 表示使用正则表达式,
    访问路径就包含/edu就转发到8080端口,访问路径中包含/vod就转发到8081端口。
    vim /usr/local/nginx/conf/nginx.conf
    在这里插入图片描述
    需要开放对应端口

    firewall-cmd --add-port=8080/tcp --permanent
    firewall-cmd --add-port=8081/tcp --permanent
    firewall-cmd --add-port=9001/tcp --permanent
    firewall-cmd --reload

    查看已经开放的端口号:
    firewall-cmd --list-all

    重新启动nginx:
    cd /usr/local/nginx/sbin
    ./nginx -s stop
    ./nginx

    4、最终测试

    Windows客户端浏览器访问:
    在这里插入图片描述
    在这里插入图片描述

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

    nginx负载均衡

    1、实现效果
    (1)浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,实现负载均衡效果,将访问请求平均分摊到 8080和 8081 端口中
    2、准备工作
    (1)准备两台 tomcat 服务器,一台 8080,一台 8081(如上反向代理实例2)
    (2)在两台 tomcat 里面 webapps 目录中,创建名称是 edu 文件夹,在 edu 文件夹中创建
    页面 a.html,用于测试

    启动两台tomcat服务器,
    cd tomcat8080/apache-tomcat-7.0.70/bin
    ./startup.sh

    cd tomcat8081/apache-tomcat-7.0.70/bin
    ./startup.sh

    3、在 nginx 的配置文件中进行负载均衡的配置
    vim /usr/local/nginx/conf/nginx.conf
    在这里插入图片描述
    负载均衡器upstream定义在http块里面,负载均衡器的名称为myserver。

    重启nginx服务器:
    cd /usr/local/nginx/sbin
    ./nginx -s stop
    ./nginx

    在这里插入图片描述
    在这里插入图片描述
    可以看出nginx将请求分摊到不同的服务器中。

    随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个陌生的话题。负载均衡就是将负载分摊到不同的服务单元,既能保证服务的可用性,又能保证响应足够快,给用户很好的体验。在Linux下有nginx、lvs、haproxy等服务可以提供负载均衡服务。

    nginx中常见的负载均衡调度算法:

    轮询算法(默认):
    将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关
    心服务器实际的连接数和当前的系统负载。
    优点:简单高效,
    缺点:没有考虑机器的性能问题,根据木桶最短木板理论,集群性能瓶颈更多的会受性能差的服务器影响。

    源地址哈希法(ip_hash):
    源地址哈希的思想是根据客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器节点数进行取模,得到的结果便是要访问节点序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会落到到同一台服务器进行访问。 这种方式能解决session共享的问题。
    在这里插入图片描述

    优点:相同的IP每次落在同一个服务器,可以人为干预客户端请求方向,
    缺点:如果某个服务器节点出现故障,会导致这个节点上的客户端无法使用,无法保证高可用。当某一用户成为热点用户,那么会有巨大的流量涌向这个服务器节点,导致冷热分布不均衡,无法有效利用起集群的性能。所以当热点事件出现时,一般会将源地址哈希法切换成轮询法。
    加权轮询法:
    不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请求;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
    优点:可以将不同机器的性能问题纳入到考量范围,集群性能最优最大化;
    缺点:生产环境复杂多变,服务器抗压能力也无法精确估算,静态算法导致无法实时动态调整节点权重,只能粗糙优化。

    动态负载均衡算法
    1、最小连接数法

    根据每个节点当前的连接情况,动态地选取其中当前积压连接数最少的一个节点处理当前请求,尽可能地提高后端服务的利用效率,将请求合理地分流到每一台服务器。俗称闲的人不能闲着,大家一起动起来。
    优点:动态,根据节点状况实时变化;
    缺点:提高了复杂度,每次连接断开需要进行计数;
    实现:将连接数的倒数当权重值。
    2、最快响应速度法
    根据请求的响应时间,来动态调整每个节点的权重,将响应速度快的服务节点分配更多的请求,响应速度慢的服务节点分配更少的请求,俗称能者多劳,扶贫救弱。
    优点:动态,实时变化,控制的粒度更细,跟灵敏;
    缺点:复杂度更高,每次需要计算请求的响应速度;
    实现:可以根据响应时间进行打分,计算权重。

    在这里插入图片描述

    nginx动静分离

    什么是动静分离

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

    动态资源请求,比如要通过tomcat查询数据库,从数据库中查询数据并返回内容等。
    静态资源请求,比如要请求一个图片的地址,一个HTML页面等

    对于客户端的静态请求,通过nginx,直接去请求静态资源服务器(有HTML资源、css样式、image资源等),而对于动态资源请求,则通过nginx转发给tomcat,由tomcat处理。

    在这里插入图片描述

    动静分离的实现大致分为两种:
    一种 是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案。【静态资源和动态资源单独部署,分别通过nginx将静态资源转发给静态资源服务器,动态资源转发给tomcat】

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

    具体实现

    前期准备:
    先准备一些静态资源:
    mkdir /data
    mkdir /data/www
    mkdir /data/image

    echo "

    test html!!

    " >> /data/www/a.html
    然后在/data/image中放置一个图片

    对nginx做静态资源配置,让nginx能指向静态资源服务器。

    具体配置:
    在 nginx 配置文件中进行配置
    vim /usr/local/nginx/conf/nginx.conf
    在这里插入图片描述
    重点是添加location内容

    通过/www路径能访问到/data/www中的内容
    通过/image路径能访问到/data/image中的内容

    启动nginx:
    cd /usr/local/nginx/sbin
    ./nginx

    最终测试:
    浏览器中输入地址: http://192.168.17.129/image/01.jpg
    在这里插入图片描述
    配置文件中写了 autoindex on,表示列出当前文件夹的内容。

    浏览器中输入地址: http://192.168.17.129/www/a.html

    在这里插入图片描述

    nginx高可用(使用pacemaker)

    参照文章:https://blog.csdn.net/qq_43604376/article/details/124082270?spm=1001.2014.3001.5501

  • 相关阅读:
    CAD中如何绑定外部参照和revit中链接CAD功能
    Element Plus 全球化配置
    Docker部署rustdesk
    初入测试职场如何做好功能测试,学会这4点秒变老鸟...
    Spark学习(6)-Spark SQL
    leetcode-分发饼干
    【爬虫系列】Python 爬虫入门(2)
    如何像用自来水一样使用数据库|腾讯云数据库TDSQL-C
    为什么说Java 中的公平锁(Fair Lock)并不是完全公平的,而是近似公平的
    14:00面试,15:00就出来了,问的问题过于变态了。。。
  • 原文地址:https://blog.csdn.net/qq_43604376/article/details/126937086