Nginx学习笔记

本文详细介绍了Nginx的各个方面,包括其高性能特性和基础功能,如静态文件处理、反向代理和负载均衡。还涵盖了Nginx的安装、常用命令、配置文件结构,以及如何实现动静分离和高可用性。通过具体的案例展示了反向代理配置和负载均衡策略,最后探讨了Nginx的工作原理和最佳实践。
摘要由CSDN通过智能技术生成

1、什么是Nginx?

Nginx(Engine X)是一个高性能的HTTP和反向代理服务器,特点是战友内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好。

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

2、Nginx的基础功能

  • 处理静态文件,索引文件以及自动索引;
  • 反向代理加速(无缓存),简单的负载均衡和容错;
  • FastCGI,简单的负载均衡和容错;
  • 模块化的结构。过滤器包括gzipping, byte ranges, chunked responses, 以及 SSI-filter 。在SSI过滤器中,到同一个 proxy 或者 FastCGI 的多个子请求并发处理;
  • SSL 和 TLS SNI 支持;

3、Nginx安装

  • 安装pcre

    sudo yum install pcre
    

    或者下载安装包进行安装:

    ## 以pcre-8.44.tar.gz为例
    ## 下载完后,将安装文件上传到服务器,然后解压
    tar -xvf pcre-8.44.tar.gz
    ## 进入解压路径
    cd pcre-8.44
    ## 安装centos编译依赖
    yum -y update
    yum install gcc gcc-c++ kernel-devel make
    ## 执行./configure
    ./configure
    ## 编译并安装
    make && make install
    
  • 安装其他依赖

    sudo yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
    
  • 安装nginx

    ## 下载nginx安装包nginx-1.18.0.tar.gz,并上传到服务器
    ## 解压缩
    tar -xvf nginx-1.18.0.tar.gz
    ## 进入解压缩目录
    cd nginx-1.18.0
    ## 执行configure
    ./configure
    ## 编译并安装
    make && make install
    

    安装成功后,会在/usr/local/目录底下生成nginx文件夹

    image-20210131190645852

    进入/usr/local/nginx/sbin/目录,运行nginx

    image-20210131190837343

    运行成功后,即可通过网页访问。

注:

​ 若是从别的客户端上访问,则需要先开放nginx服务器的端口,否则其他主机将无法访问。

## 1、查看开放的端口号
sudo firewall-cmd --list-all

image-20210131191935191

## 2、设置开放的端口
# sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=80/tcp --permanent

image-20210131192139817

## 重启防火墙
sudo firewall-cmd --reload

image-20210131192313158

现在,就可以在其他主机上通过ip地址访问了。

image-20210131192409672

4、nginx常用命令

## 1、若要使用nginx命令,则需进入nginx的文件夹下才能进行操作
cd /usr/local/nginx/sbin

## 2、查看nginx版本
./nginx -v

image-20210131192914558

## 3、启动nginx
sudo ./nginx

image-20210131193308500

## 4、关闭nginx
sudo nginx -s stop

image-20210131193157535

## 5、重新加载nginx配置文件
sudo ./nginx -s reload

image-20210131193443029

5、nginx配置文件

  • nginx配置文件的路径

    /usr/local/nginx/conf/nginx.conf
    
  • nginx配置文件的组成

    主要分为三个部分:全局块、events块和http块。

    • 全局块

      从配置文件开始到events块之间的内容,主要配置一些影响nginx服务器运行的配置指令。其中:

      work_proccesses 1;  ## nginx并发处理服务的关键配置,该值越大,可支持的并发处理量月多(受硬件、软件设备等约束)
      

      image-20210131194057338

    • events块

      该部分涉及的指令主要影响nginx服务器与用户的网络连接。其中:

      worker_connecctions 1024; ## 每个work_processes支持的最大连接数,该配置对nginx性能影响较大,在实际中需灵活配置
      

      image-20210131194658958

    • http块

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

      • http全局块

        指令包括文件引入、MIME-TYPE定义、日志定义、连接超时时间、单链接请求数上限等;

        image-20210131195409120

      • server块

        与主机密切相关,又细分为:server全局块和location块。

        server全局块主要主要配置虚拟主机的监听配置和虚拟主机的命令或IP配置;一个server块可以配置多个location块,location块的作用是监听nginx服务器接收到的请求,对虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理。

        image-20210131195633442

6、反向代理

定义

  • 正向代理

    当用户需要访问谷歌网站(www.google.com)时,直接访问是访问不了的,若要能够访问,则需要在浏览器中设置代理服务器,通过代理服务器去访问谷歌网站,这种方式就叫做正向代理

image-20210131154601517

  • 反向代理

    反向代理服务器和目标服务器对外是一个服务器,暴露的是代理服务器的地址和端口,隐藏了真实服务器的地址和端口。用户只需要将请求发送到代理服务器,代理服务器会将请求分发给目标服务器,目标服务器返回数据后,数据通过代理服务器返回给客户端,这种方式就叫做反向代理

image-20210131163411904

案例1

  • 目的:当用户访问http://www.123.com时,直接跳转到127.0.0.1:8080;

  • 步骤:

    • 安装tomcat

      ## 下载tomcat并将文件上传到服务器:apache-tomcat-9.0.41.tar.gz
      ## 解压安装文件
      tar -xvf apache-tomcat-9.0.41.tar.gz
      cd apache-tomcat-9.0.41
      ## 运行tomcat
      cd bin/
      ./startup.sh
      ## 开放8080端口
      sudo firewall-cmd --add-port=8080/tcp --premanent
      sudo firewall-cmd --reload
      

      测试,在网页上访问8080端口

      image-20210131202604535

    • 配置域名www.123.com与ip192.168.106.128的映射(Windows系统),将映射关系添加到C:\Windows\System32\drivers\etc\hosts文件中;

      image-20210131203352437

      配置完成之后,即可通过域名访问服务器:

      image-20210131203611876

    • 修改nginx配置文件/usr/local/nginx/conf/nginx.conf

      image-20210131203954565

      修改完成后,保存并退出,然后nginx重新加载配置文件:

      cd /usr/local/nginx/sbin/
      sudo ./nginx -s reload
      

      重新加载完成后,即可在浏览器中访问80端口:

      image-20210131204225527

案例2

  • 目的:访问http:192.168.106.128:9001/edu/时跳转到127.0.0.1:8080;

    ​ 访问http:192.168.106.128:9001/vod/时跳转到127.0.0.1:8081

  • 步骤:

    • 准备两个tomcat,操作与案例1一致,一个是8080端口,一个是8081端口

      image-20210131210143113

      image-20210131210202799

    • 准备可识别的html页面

      ## 进行8080端口的tomcat目录下的webapps目录
      cd /usr/src/tomcat8080/apache-tomcat-9.0.41/webapps/
      ## 创建edu目录
      sudo mkdir edu && cd edu
      ## 创建a.html,并添加标签<h1>8080!!</h1>
      sudo vim a.html
      

      配置完成后,可在浏览器中访问:

      image-20210131211037448

      ## 进行8081端口的tomcat目录下的webapps目录
      cd /usr/src/tomcat8081/apache-tomcat-9.0.41/webapps/
      ## 创建vod目录
      sudo mkdir vod && cd vod
      ## 创建a.html,并添加标签<h1>8081!!</h1>
      sudo vim a.html
      

      配置完成后,可在浏览器中访问:

      image-20210131211141440

    • 配置nginx配置文件/usr/local/nginx/conf/nginx.conf

      image-20210131211817519

      其中,location中的标签代表:

      • ~:表示url包含正则表达式,则区分大小写;
      • ~*:表示url包含正则表达式,则不区分大小写;
      • =:用于不含正则表打死的uri前,要求请求字符串与uri严格匹配;
      • ^~:用于不含正则表打死的uri前,要求nginx服务器找到标识uri 与请求字符串匹配度最高的location后,立即使用该location。

      修改完成后,重新加载nginx配置文件

      cd /usr/local/nginx/sbin
      sudo ./nginx -s reload
      

      开放端口号:900180808081

      sudo firewall-cmd --add-port=9001/tcp --premanent
      sudo firewall-cmd --reload
      

      重新加载后,可在浏览器中测试:

      image-20210131212022190

      image-20210131212104279

7、负载均衡

定义

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

​ 负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。

image-20210131164810773

案例

  • 目的:访问http:192.168.106.128:9001/edu/a.html时随机跳转到127.0.0.1:8080或者127.0.0.1:8081;

  • 步骤:

    • 准备两个tomcat,一个指向8080,一个指向8081(参考反向代理案例2),在tomcat8081/webapps/目录下新增edu/a.html路径和文件,a.html文件内容如下:

      <h1>
          8081!! Hello world
      </h1>
      
    • 配置完成后分配启动两个tomcat服务器:

      cd /usr/src/tomcat8080/apache-tomcat-9.0.41/bin
      ./startup.sh
      

      image-20210202124401684

    • 配置nginx配置文件:

      upstrem myserver {
      	server 192.168.106.128:8080;
      	server 192.168.106.128:8081;
      }
      
      ## 也可以配置上权限,配置上权重后,服务器会按权重将请求分配到对应的目标服务器
      upstrem myserver {
      	server 192.168.106.128:8080 weight=1;
      	server 192.168.106.128:8081 weight=1;
      }
      

      image-20210202130655361

    • 重新加载nginx配置文件

      cd /usr/local/nginx/sbin
      sudo ./nginx -s reload
      
    • 重新加载后,可在浏览器中测试:

      第一次访问:

      image-20210202131014035

      第二次访问:

      image-20210202131054041

负载均衡分配方式(策略)

  • 轮询(默认)

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

  • 权重(weight)

    weight代表权重,默认是1,权重越高分配的请求越多;

    upstrem myserver {
    	server 192.168.106.128:8080 weight=10;
    	server 192.168.106.128:8081 weight=5;
    }
    
  • ip_hash

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

    upstrem myserver {
        ip_hash;
    	server 192.168.106.128:8080;
    	server 192.168.106.128:8081;
    }
    
  • fair(第三方)

    根据后台服务器的响应时间来分配请求,响应时间短的优先分配;

    upstrem myserver {
    	server 192.168.106.128:8080;
    	server 192.168.106.128:8081;
        fair;
    }
    

7、动静分离

定义

​ 为了加快网站的解析速度,可以将动态页面和静态页面分别部署到两台服务器上,有不用的服务器来解析,加快解析速度,降低单服务器的压力,这种方式就是动静分离

Nginx动静分离简单来说就是将动态请求和静态请求分开,不仅仅是单纯的将动态页面和静态页面分开。

image-20210131165747608

案例

  • 目的:访问http://192.168.106.128/www/a.html访问的是服务器/data/www/a.html;当访问动态资源是,访问tomcat,即跳转http://192.168.106.128:8080

  • 步骤:

    • 创建路径/data/www/,在该路径下创建文件a.html

      cd / && sudo mkdir data
      cd data && sudo mkdir www
      cd www && sudo vim a.html
      
      <h1>
          test html!!
      </h1>
      
    • 修改nginx配置文件

      image-20210202192850103

    • 重新加载nginx配置文件

      cd /usr/local/nginx/sbin
      sudo ./nginx -s reload
      
    • 重新加载后,可在浏览器中测试:

      image-20210202193110733

说明

location /image/ {
    root /data/;
    autoindex on;  ## 当配置该项时,访问文件后会显示文件夹的内容
}

8、高可用

定义

一般情况下,客户端访问的是主代理服务器,有主代理服务器将请求分发到目标服务器上;当主代理服务器出现异常而导致无法访问时,客户端会去访问备份代理服务器,有备份代理服务器将请求分发到目标服务器上,这种方式就是高可用。

在这个模式下,代理服务器会对外暴露一个虚拟ip,同时每个代理服务器均需配置KeepAlived,由KeepAlived控制虚拟ip实际访问的是哪台代理服务器;而客户端访问的是代理服务器暴露的虚拟ip。

image-20210202195150230

案例

  • 目的:当停掉主代理服务器后,网站仍可以正常访问;

  • 环境

    • 两台服务器:192.168.106.128192.168.106.129
    • 均安装nginx
    • 均安装keepalived
  • 步骤

    • 安装keepalived

      sudo yum install -y keepalived
      

      安装完成后,即可在/etc/keepalived/路径下找到keepalived.conf文件;

    • 配置主服务器192.168.106.128keepalived配置文件,进入/etc/keepalived/目录,修改keepalived.conf配置文件:

      ! Configuration File for keepalived
      
      # 全局配置
      global_defs {
          # 邮件通知信息
         notification_email {
           # 收件人
           acassen@firewall.loc
           failover@firewall.loc
           sysadmin@firewall.loc
         }
         # 发件人
         notification_email_from Alexandre.Cassen@firewall.loc
         # SMTP服务器地址
         smtp_server 192.168.200.1
         # SMTP 超时时间
         smtp_connect_timeout 30
         # 路由器标识,一般不用改,也可以写成每个主机自己的主机名
         router_id LVS_DEVEL
         vrrp_skip_check_adv_addr
         # vrrp_strict
         vrrp_garp_interval 0
         vrrp_gna_interval 0
      }
      
      # 一个vrrp_instance就是定义一个虚拟路由器的实例名称
      vrrp_instance VI_1 {
          #定义类型,MASTER(主服务器)或BACKUP(备份服务器)
          state MASTER
          # 接口,网卡名
          interface ens33
          # 虚拟路由ID,取值范围为0-255
          virtual_router_id 51
          # 优先级,值越高优先程度越高,主服务器需比备份服务器要高
          priority 190
          # 频率,单位为秒
          advert_int 1
          # 通信认证机制
          authentication {
              # 认证方式,可以是PASS或AH
              auth_type PASS
              # 认证密码,最大8位数
              auth_pass 1111
          }
          # 虚拟IP地址
          virtual_ipaddress {
              192.168.106.16
          }
      }
      

      虚拟IP最好与服务器IP处于同一个网段,如在本例中,虚拟IP的地址最好为:192.168.106.xxx,一开始验证时,设置的是192.168.200.16,导致keepalived启动后无法访问虚拟IP。

    • 保存并退出配置文件,然后启动keepalived:

      sudo systemctl start keepalived.service
      
    • 启动nginx

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

      启动后,主服务器就配置完成了,这时通过浏览器可以进行访问:

      image-20210204200252031

      image-20210204200332460

    • 配置从服务器192.168.106.129keepalived配置文件,进入/etc/keepalived/目录,修改keepalived.conf配置文件,修改一下内容:

      image-20210204201343515

      具体配置文件内容如下:

      ! Configuration File for keepalived
      
      # 全局配置
      global_defs {
          # 邮件通知信息
         notification_email {
           # 收件人
           acassen@firewall.loc
           failover@firewall.loc
           sysadmin@firewall.loc
         }
         # 发件人
         notification_email_from Alexandre.Cassen@firewall.loc
         # SMTP服务器地址
         smtp_server 192.168.200.1
         # SMTP 超时时间
         smtp_connect_timeout 30
         # 路由器标识,一般不用改,也可以写成每个主机自己的主机名
         router_id LVS_DEVEL
         vrrp_skip_check_adv_addr
         # vrrp_strict
         vrrp_garp_interval 0
         vrrp_gna_interval 0
      }
      
      # 一个vrrp_instance就是定义一个虚拟路由器的实例名称
      vrrp_instance VI_1 {
          #定义类型,MASTER(主服务器)或BACKUP(备份服务器)
          state BACKUP
          # 接口,网卡名
          interface ens33
          # 虚拟路由ID,取值范围为0-255
          virtual_router_id 51
          # 优先级,值越高优先程度越高,主服务器需比备份服务器要高
          priority 90
          # 频率,单位为秒
          advert_int 1
          # 通信认证机制
          authentication {
              # 认证方式,可以是PASS或AH
              auth_type PASS
              # 认证密码,最大8位数
              auth_pass 1111
          }
          # 虚拟IP地址
          virtual_ipaddress {
              192.168.106.16
          }
      }
      
    • 保存并退出配置文件,然后启动keepalived:

      sudo systemctl start keepalived.service
      
    • 启动nginx

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

      启动后,从服务器也配置完成了,这时通过浏览器进行验证了:

  • 测试

    • 第一次访问虚拟IP192.168.106.16

    image-20210204200332460

    • 将主服务器192.168.106.128上的keepalivednginx停掉:

      # 停掉keepalived
      sudo systemctl stop keepalived.service
      # 停掉nginx
      cd /usr/local/nginx/sbin
      sudo ./nginx -s stop
      

      image-20210204202050234

    • 第二次访问虚拟IP192.168.106.16,依旧可以访问:

      image-20210204202420997

9、nginx原理

  • 简介
    • 默认采用多进程工作方式;
    • Nginx启动后,会运行一个master进程和多个worker进程;
    • master进程:
      • 用户与worker之间的交互的接口;
      • 管理worker进程,实现服务重启、平滑升级、更换日志文件,更新配置文件等功能;
    • worker进程:
      • 处理基本的网络事件;
      • worker之间是平等的;
      • 以竞争的方式来争抢来自客户端的请求;
  • 整体模型

img

  • 一个master多个worker的好处

    • 可以使用nginx -s reload进行热部署,利用nginx进行热部署操作;
    • 每个worker都是独立的进程,如果其中一个worker出现问题,也不会影响其他的worker,其他会进行对请求进行争抢,实现请求过程,不会造成服务中断;
  • 需要设置多少个worker:

    • 每个worker的线程都可以将一个cpu的性能发挥到极致,因此worker数和服务器的cpu数一致是最适宜的。
  • 连接数worker_connection:

    • 发送请求,占用了2个或者4个连接数;

    • 支持的最大并发数:

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

      • HTTP作为反向代理的最大并发数是:work_connections * worker_processes / 4;

      • 以上,如果nginx有一个master,4个worker,每个worker支持的最大连接数是1024,那么支持的最大连接数是:

        1024 * 4 / 2 = 2048;  # 静态
        1024 * 4 / 4 = 1024;  # HTTP
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值