• Nginx入门


    1、Nginx基本概念

    1.1、什么是Nginx

    Nginx (engine x) 是一个高性能的HTTP反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

    其特点是占有内存少,并发能力强。

    Nginx 是一个很强大的高性能Web反向代理服务,它能够支持高达 50,000 个并发连接数的响应。

    1.2、正向代理

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

    代理对象是客户端,不知道服务端是谁。

    1.3、反向代理

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

    代理对象是服务端,不知道客户端是谁。

       

    1.4、负载均衡

    客户端发送多个请求到服务器,服务器处理请求,有些可能要访问数据库,服务器处理完毕后再将结果返回客户端。

    这种架构模式单一,适合并发请求少的情况,但并发量大的时候如何解决?

      

    首先可能想到升级服务器配置,但硬件的性能提升不能满足日益增长的需求,此时想到服务器集群,增加服务器数量,然后将原先请求单个服务器的情况改为将请求分发到多个服务器上,将负载分发到多个服务器上,也就是我们讲的负载均衡

       

    1.5、动静分离

    为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,减少服务器压力,加快解析速度。

    2、Nginx安装

     2.1进入Nginx官网下载安装包

    http://nginx.org/

    nginx-1.21.3.tar.gz

    需要安装依赖:pcre、openssl、zlib

     2.2安装依赖

    (1)安装pcre依赖

    压缩文件解压后进入目录执行./configure

    使用 make && make install 编译安装

    安装后查看版本号:

     pcre-config --version

    (2)安装openssl

    (3)安装zlib

    #连网安装 yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

    2.3安装Nginx

    压缩文件 nginx-1.21.3.tar.gz 解压后进入目录执行./configure

    使用 make && make install 编译安装

    tar -xvf nginx-1.21.3.tar.gz
    cd nginx-1.21.3
    ./configure
    make && make install 

    安装成功后,会生成文件夹 /usr/local/nginx/ ,nginx的sbin文件夹里包含了启动脚本

    cd /usr/local/nginx/sbin
    ./nginx

    查看启动状态:

    ps -ef|grep nginx

    nginx默认监听80端口,浏览器访问IP显示

     

    若访问不了,检查防火墙

    查看开放端口号

    firewall-cmd --list-all

    设置开放端口号

    firewall-cmd --add-service=http --permanent

    sudo firewall-cmd --add-port=80/tcp --permanent

    重启防火墙

    firewall-cmd --reload

    3、Nginx常用命令和配置

    3.1、Nginx操作常用命令

    (1)使用Nginx命令必须进入Nginx目录

    cd /usr/local/nginx/sbin

    (2)查看Nginx版本

    ./nginx -v

    (3)启动Nginx

    ./nginx

    (4)关闭Nginx

    ./nginx -s stop

    (5)重新加载Nginx(修改配置文件后不重启更新)

    ./nginx -s reload

    3.2、Nginx配置文件

    (1)配置文件路径: /usr/local/nginx/conf/nginx.conf

    (2)配置文件由三部分组成:全局块、events、http。

      全局块:设置一些影响Nginx服务器整体运行的配置指令。比如worker_processes 1;worker_processes 值越大可以支持的并发数量越多。

      events:涉及的指令主要影响Nginx服务器与用户的网络连接。比如worker_connections  1024;支持的最大连接数。

      http:Nginx配置中最频繁的部分:代理、缓存、日志、负载均衡...

        http块又包含http全局、server块。

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

        server块与虚拟主机有密切联系。http块可以包含多个server块,而每个server块相当于一个虚拟主机。

          每个server块包含全局server块和location块

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

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

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

    4、Nginx配置实例-反向代理1

     4.1实现效果

    浏览器输入 www.123.com,跳转到linux系统tomcat主页

     4.2准备工作

    (1)linux系统安装tomcat使用默认端口8080,启动

    (2)对外开放访问端口

      firewall-cmd --add-port=8080/tcp --permanent

      firewall-cmd --reload

    (3)测试,浏览器访问tomcat

     4.3访问过程分析

     4.4具体配置

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

    C:WindowsSystem32driversetchosts

    添加:192.168.0.104 www.123.com

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

     (3)测试,浏览器访问www.123.com展示tomcat主页

     

      

    5、Nginx配置实例-反向代理2

     5.1实现效果

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

    Nginx监听端口为9001

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

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

     5.2准备工作

    (1)准备两个tomcat,端口分别是8080、8081

    (2)创建文件夹和测试界面

    8080端口tomcat/webapps/edu/a.html

    <h1>8080</h1>

     8081端口tomcat/webapps/vod/a.html

    <h1>8081</h1>

     5.3 具体配置

    (1)Nginx配置文件:/usr/local/nginx/conf/nginx.conf

    添加配置:

        server {
            listen  9001;
            server_name 192.168.0.104;
    
            location ~ /edu/ {
                    proxy_pass http://127.0.0.1:8080;
            }
    
            location ~ /vod/ {
                    proxy_pass http://127.0.0.1:8081;
            }
        }

    (2)防火墙开放端口 9001、8080、8081

    firewall-cmd --add-port=9001/tcp --permanent

    firewall-cmd --reload

    (3)Nginx重新加载

     5.4 测试

     

      

     5.4 配置中location指令说明

    1. 以=开头表示精确匹配,如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
    2. ^~ 开头表示uri以某个常规字符串开头,不是正则匹配
    3. ~ 开头表示区分大小写的正则匹配;
    4. ~* 开头表示不区分大小写的正则匹配
    5. / 通用匹配, 如果没有其它匹配,任何请求都会匹配到

    顺序 no优先级:

    (location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

      

    6、Nginx配置实例-负载均衡

     6.1实现效果

    (1)浏览器访问http://192.168.0.104/edu/a.html ,负载均衡使请求平均分发到8080和8081端口

    6.2准备工作

    (1)准备两个tomcat,端口分别是8080、8081

    (2)创建文件夹和测试界面

    8080端口tomcat/webapps/edu/a.html

    <h1>8080</h1>

      8081端口tomcat/webapps/edu/a.html

    <h1>8081</h1>

     6.3 负载均衡配置

    (1)Nginx配置文件:/usr/local/nginx/conf/nginx.conf

    配置:

    http {
    ......
            upstream myserver{
                server 192.168.0.104:8080;
                server 192.168.0.104:8081;
            }
    ....
            server{
                listen       80;
              server_name  192.168.0.104;
                location / {
                    .....
                    proxy_pass http://myserver;
                    proxy_connect_timeout 10;
                }
                ....        
            }
    }

     6.4 测试

    浏览器访问http://192.168.0.104/edu/a.html

     6.5 Nginx分配服务器策略

    (1)轮询(默认)

    每个请求按时间先后顺序分配到后端服务器,服务器down掉则删除。

    (2)weight

    权重默认为1,数值越大分配请求越多

    upstream myserver{
        server 192.168.0.104:8080 weight=5;
        server 192.168.0.104:8081 weight=10;
    }

    (3)ip_hash

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

    upstream myserver{
        ip_hash;
        server 192.168.0.104:8080;
        server 192.168.0.104:8081;
    }

    (4)fair(第三方)

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

    upstream myserver{  
        server 192.168.0.104:8080;
        server 192.168.0.104:8081;
      fair; }

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

     7.1准备工作

    (1)在linux系统中准备一些静态资源,用于访问

      /data/file/a.html

      /data/image/bg.jpg

     7.2具体配置

    server {
            listen       80;
            server_name  192.168.0.104;      
    
            location /file/ {
                root   /data/;
                index  index.html index.htm;
            }
            location /image/ {
                    root /data/;
                    autoindex on;
            }
    autoindex on;//列出文件目录

     7.3具体配置

    (1)浏览器访问 http://192.168.0.104/image/

    (2)浏览器访问 http://192.168.0.104/file/a.html

    8、Nginx配置实例-高可用

     8.1实现效果

    (1)主Nginx服务器宕机后自动切换到备用Nginx服务器

      

     8.2配置高可用准备工作

    (1)两台虚拟机环境 192.168.0.103、192.168.0.104,均需安装Nginx (可使用vware克隆功能)

    (2)两台虚拟机安装 keepalived

      yum install keepalived -y

      rpm -q -a keepalived 查询安装结果

      安装位置 /etc/keepalived 配置文件 keepalived.conf

    #keepalived常用指令
    systemctl start keepalived.service
    systemctl stop keepalived.service
    systemctl restart keepalived.service

     8.3高可用配置(主从配置)

    (1)修改/etc/keepalived/keepalived.conf

       主要是配置这两个节点,下方其他的是配置的lvs,我们不需要修改。

      修改如下:

    global_defs {
    
       notification_email { # keepalived服务宕机异常出现的时候,发送通知邮件 可以是多个
    
         acassen@firewall.loc  #  收件人邮箱1
    
         failover@firewall.loc #  收件人邮箱2
    
         sysadmin@firewall.loc #  收件人邮箱3
    
       }
    
       notification_email_from Alexandre.Cassen@firewall.loc  #邮件发件人
    
       smtp_server 192.168.200.1  # 邮件服务器地址
    
       smtp_connect_timeout 30   # 超时时间
    
       router_id LVS_DEVEL   # 机器标识 局域网内唯一即可
    
       vrrp_skip_check_adv_addr # 默认是不跳过检查。检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思是,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)。
    
       #vrrp_strict   # 严格遵守VRRP协议。下列情况将会阻止启动Keepalived:1. 没有VIP地址。2. 单播邻居。3. 在VRRP版本2中有IPv6地址。
    
       vrrp_garp_interval 0  # 小数类型,单位秒,在一个网卡上每组gratuitous arp消息之间的延迟时间,默认为0,一个发送的消息=n组 arp报文
    
       vrrp_gna_interval 0 # 小数类型,单位秒, 在一个网卡上每组na消息之间的延迟时间,默认为0
    
    }
    
     
    
    # vrrp实例  我们集群设置 多机配置,除了state和priority不一样,其他都一样
    
    vrrp_instance VI_1 {
    
        state MASTER  # 服务器状态 MASTER是主服务器  BACKUP是备份服务器 主服务器的priority要比备份服务器大
    
        interface ens33 # 通信端口 通过ip addr可以看到 根据自己的机器配置
    
        virtual_router_id 51  # vrrp实例id  keepalived集群,实例id必须一致
    
        priority 100  # 权重比 主服务器的priority要比备份服务器大
    
        advert_int 1  # 心跳间隔  单位秒  keepalived多机器集群 通过心跳检测,如果发送心跳没反应 就立刻接管;
    
        authentication { # 服务器之间通信密码
    
            auth_type PASS
    
            auth_pass 1111
    
        }
    
        virtual_ipaddress { # 自定义虚拟IP 
    
            192.168.91.199
    
        }
    
    }

      把这个配置复制到从服务器上,state改为BACKUP,从服务器的priority改小

      到这里我们高可用就初步完成了,可以开启nginx和keepalived测试了

      

    (2)在 /sur/local/src目录下添加检测脚本,检测Nginx是否活着

    • 上面的配置已经可以初步测试nginx的高可用,比如我们关掉主服务器的keepalived,从服务器的nginx就会替代主nginx。
    • 但如果是我们的主nginx挂掉而主keepalived没挂,我们从nginx就不能替代主nginx,实际情况中nginx比keepalived更容易挂掉
    • 我们可以在keepalived添加脚本,当检测到我们的nginx挂掉之后而keepalived没挂掉,我们可以让脚本主动尝试重启nginx服务,如果实在重启不了nginx,我们让脚本主动关闭keepalived好让从nginx替代上来

    修改keepalived.conf

    在这个位置添加脚本配置

    vrrp_script chk_http_port {
     script "/home/nginx_check.sh" #脚本地址
     interval 2 #检测脚本执行的间隔
     weight 2 #比重
    }

    然后相对应的地址创建nginx_check.sh

    #!/bin/bash
    echo 'xxxxxx'
    count_nginx=`ps -ef|grep -w nginx|grep -v grep|wc -l`
    echo $count_nginx
    if [ $count_nginx -eq 0 ];then
        systemctl start nginx.service
        sleep 2
        if [ `ps -ef|grep -w nginx|grep -v grep|wc -l` -eq 0 ];then
            systemctl stop keepalived.service
        fi  
    fi

    (3)启动Nginx、keepalived

    ./nginc

    systemctl star keepalived.service

     8.4测试

    (1)访问虚拟 ip,然后把主 Nginx 或者 keepalived 停掉,重新访问虚拟ip仍然可以访问

    9、Nginx原理解析

    marst&worker

     master接收信号后将任务分配给worker进行执行,worker可有多个。

      

    worker如何工作

    客户端发送一个请求到master后,worker获取任务的机制不是直接分配也不是轮询,而是一种争抢的机制,“抢”到任务后再执行任务,即选择目标服务器tomcat等,然后返回结果。

    worker_connection

    发送请求占用了woker两个或四个连接数。

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

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

    当然了,worker数也不是越多越好,worker数和服务器的CPU数相等时最适宜的。

    优点

    • 可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作
    • 每个 woker 是独立的进程,若其中一个woker出现问题,其他继续进行争抢,实现请求过程,不会造成服务中断
  • 相关阅读:
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    第一次作业
    实验三 算术编码压缩方法
    实验二 统计压缩方法的具体实现
    实验一 建立统计压缩方法理论模型
    第五次作业
    第四次作业
  • 原文地址:https://www.cnblogs.com/herongxian/p/15365219.html
Copyright © 2020-2023  润新知