Nginx小白保姆级入门笔记,看了不会算我输!

1. Nginx基本概念

1.1 Nginx简介

  1. Nginx是一个高性能的HTTP和反向代理web服务器
  2. 特点是占有内存少,并发能力强
  3. Nginx专为性能优化而开发,能经受高负载的考验,有报告表明能支持高达50000个并发连接数



1.2 相关概念

1.2.1 反向代理

正向代理

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

反向代理

  1. 反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将服务发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器地址。
  2. 简单理解:对于客户端来说,反向代理服务器把自己当成了目标服务器,至于我要做什么,你客户端不要问,问就是不知道。


1.2.2 负载均衡

​ 单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。



1.2.3 动静分离

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




2. Nginx安装

  1. 官网下载1.12.2版本Nginx

  2. 安装Nginx相关素材:

    • 安装pcre:wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz 可以直接从windows拖到Xshell!

      解压

      进入解压之后的目录。执行./configure(检查)

      执行命令:make && make install

      查看版本:pcre-config–version

    • 安装zlib、oepnssl:yum -y install make zlib zlib-devel gcc-c++libtool openssl openssl-devel

  3. 安装Nginx:同上安装pcre!

  4. 安装成功之后,在/usr中会多出一个文件夹local/nginx,在nginx/sbin中有启动脚本

  5. 启动之后,防火墙要开放80端口号才行,然后访问192.168.200.128:80




3. Nginx常用命令

使用Nginx命令的前提:进入Nginx目录:/usr/local/nginx/sbin

常用命令

  1. 查看nginx版本号:./nginx -v
  2. 启动nginx:./nginx
  3. 关闭nginx:./nginx -s sop
  4. 重新加载nginx:./nginx -s reload



4. Nginx配置文件

位置

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

组成

  1. Nginx配置文件由三部分组成:

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

      worker_processes = 1
      // 这是Nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量也就越多,但是会受到硬件、软件设备的制约
      
    • events块:涉及的指令主要影响Nginx服务器与用户的网络连接。

      events {
          worker_connections 1024          // nginx服务器支持的最大连接数
      }
      
    • http块:Nginx服务器中配置最频繁的部分。Http全局块指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。server块和虚拟主机有关系,又包括全局server块和location块




5. Nginx配置实例

5.1 反向代理准备工作

  1. 安装启动Tomcat!8080端口!

  2. 启动端口80、8080、8081、8082、9001方便后续测试

  3. 访问过程




5.2 反向代理实例1

效果

在浏览器地址栏输入www.123.com ,然后跳转到Tomcat页面。

过程

  1. 在window系统的hosts文件中进行域名和ip对应关系的配置

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-10fdI0YG-1617459962046)(E:\学习笔记\图片\image-20210324230132222.png)]

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

  3. 启动nginx测试!




5.3 反向代理实例2

效果

访问http://192.168.200.128:9001/edu/ ,直接跳转到127.0.0.1:8080

访问http://192.168.200.128:9001/vod/ ,直接跳转到127.0.0.1:8081

过程

  1. 两个tomcat服务器,一个8080端口,一个80801端口

  2. 创建文件夹和测试文件:8080tomcat里有一个项目edu,页面a.html,有一句话8080,8081tomcat里有一个项目vod,页面a.html,有一句话8081

  3. 开始配置:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8C1gJtmc-1617459962049)(E:\学习笔记\图片\image-20210325214023426.png)]

    开放对外访问的端口号:

  4. 测试




5.4 负载均衡实例

效果

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

准备

  1. 两台Tomcat服务器,5.3已准备

  2. 两台Tomcat里面webapps目录中,创建名称是edu文件夹,在edu文件夹中创建页面a.html,用于测试

  3. 在nginx配置文件中进行负载均衡的配置(第一个红快是在http块设置!)

    可以在配置的myserver里面的每个server后加weight=1、2 表示负载权重

  4. Nginx提供了几种分配方式:

    • 轮询(默认):每个请求按时间顺序分配到后端服务器,如果down掉,自动剔除
    • weight:weight代表权重,默认为1,权重越高分配的越多
    • ip_hash:每个请求按照ip的hash分配,这样每个访客固定访问后端一个服务器,解决了session的问题,加在第一红块server上一行
    • fair(第三方):按后端服务器响应的时间来分配,响应时间短的优先分配。加在第一红块server最后一行



5.5 动静分离实例

动静分离理解

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

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

准备工作

在Linux系统中准备一些静态资源:www中放一个html页面,image中放个图片

具体配置

  1. 在Nginx配置文件中进行配置

  2. 测试:

    输入http://192.168.200.128/image/01.jpg,配置了autoindex on,只访问到image,会列出来目录

    输入http://192.168.200.128/www/a.html:




5.6 高可用实例

理解高可用

我们需要有这么两台Nginx服务器,keepAlive,虚拟ip地址

准备工作

  1. 两台服务器192.168.200.128、192.168.200.129
  2. 两台服务器上都安装nginx
  3. 两台服务器上的usr文件夹下都安装keepalived:yum install keepalived -y ,安装完成后,在etc里面生成目录keepalived,有文件keepalived.conf

高可用配置(主从配置)

  1. 修改etc/keepalived/keepalived.conf: 主机master,那个是100,从机backup,90,都有虚拟主机

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         [email protected]
         [email protected]
         [email protected]
       }
       notification_email_from [email protected]
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_script chk_http_port {
    	script "/usr/local/src/nginx_check.sh"
    
    	interval 2
    
    	weight 2
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface ens33
        virtual_router_id 51
        priority 90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.200.16
            192.168.200.17
            192.168.200.18
        }
    }
    
    virtual_server 192.168.200.100 443 {
        delay_loop 6
        lb_algo rr
        lb_kind NAT
        persistence_timeout 50
        protocol TCP
    
        real_server 192.168.201.100 443 {
            weight 1
            SSL_GET {
                url {
                  path /
                  digest ff20ad2481f97b1754ef3e12ecd3a9cc
                }
                url {
                  path /mrtg/
                  digest 9b3a0c85a887a256d6939da88aabd8cd
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
    
    virtual_server 10.10.10.2 1358 {
        delay_loop 6
        lb_algo rr 
        lb_kind NAT
        persistence_timeout 50
        protocol TCP
    
        sorry_server 192.168.200.200 1358
    
        real_server 192.168.200.2 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl3/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    
        real_server 192.168.200.3 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334c
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334c
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
    
    virtual_server 10.10.10.3 1358 {
        delay_loop 3
        lb_algo rr 
        lb_kind NAT
        persistence_timeout 50
        protocol TCP
    
        real_server 192.168.200.4 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl3/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    
        real_server 192.168.200.5 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl3/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
    
    
  2. 在/usr/local/src添加检测脚本

    #!/bin/bash
    a=`ps -C nginx -no-header |wc -l`
    if [ $A -eq 0];then
    	/usr/local/nginx/sbin/nginx
    	sleep 2
    	if[  `ps -C nginx  --no-header |wc -l` -eq 0 ];then
    		killall keepalived
    	fi
    fi
    
  3. 把两台服务器上的nginx和keepalived启动:systemctl start keepalived.service

  4. 测试:在浏览器中输入配置文件中虚拟的ip地址:http://192.168.200.16/

  5. 测试:把主服务器(192.168.200.128)nginx和keepalived都停掉,再看效果:还是可以正常访问!(ip a可以查看虚拟ip的绑定情况)

配置文件解析

检测脚本文件:




6. Nginx原理

两个进程(一个master多个worker)

worker工作流程

优点

  1. 可以使用nginx -s reload热部署!
  2. 每个worker是一个独立的进程,如果其中的一个worker出现问题,其他的worker是独立的,会继续进行争抢,实现请求过程,不会发生服务中断
  3. 设置多少个woker才是最合适的?worker数和cpu数相等是最适宜的

连接数worker_connections

  1. 发送一个请求,占用worker几个连接数?

    如果请求的是静态资源服务器,会占用2个,如果请求的是Tomcat等后台服务器,会占用4个

  2. nginx中有一个master、四个worker,每个woker支持的最大的连接数是1024,那么支持的最大并发数是多少?如果请求的是静态资源服务器,支持1024*4/2=2048个并发,如果请求的是Tomcat服务器,那么支持1024 x 4 / 4=1024个并发

猜你喜欢

转载自blog.csdn.net/lyyrhf/article/details/115451771
今日推荐