Nginx

【本文参考尚硅谷的视频】

1、基本概念

  (1)是什么,能做什么

    高性能的HTTP和反向代理web服务器,占用内存少,并发性高,专门为性能优化而开发。

  (2)反向代理

    ① 正向代理:如果说把局域网外的internet想象成一个巨大的资源库,则局域网中的客户想要访问internet,则需要代理服务来访问,这种代理服务就叫正向代理。

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

  (3)负载均衡

    将请求集中到单个服务器的情况,改为请求分发到多个服务器上,将负载分发到不同的服务器上。

  (4)动静分离

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

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

  (1)在linux中安装nginx

    使用xshell连接Linux

    下载nginx

    ① 安装pcre依赖

      把安装文件放到linux指定文件夹中,可以直接拖过去

      解压压缩文件  tar -xvf 压缩文件名称

      进入解压之后的根目录,执行./configure

        这里如果不成功,需要安装依赖库,下图是成功之后的样子

        Nginx

 

        依赖库执行命令:

          gcc:   yum install gcc-c++  安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境

          pcre:  yum install -y pcre pcre-devel  PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括perl兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式

          zlib:   yum install -y zlib zlib-devel  zlib提供了很多种压缩和解压缩的方式,nginx使用zlib堆http的内容进行gzip

          openssl:  yum install -y openssl openssl-devel  openssl以一个强大的安全套接字层密码库,囊括主要的密码算法、常用的秘钥和证书封装管理功能及ssl协议,并提供丰富的应用程序供测试或其它目的使用。

                                   ngixn不仅支持http,也支持https,所以需要安装openssl

      使用make && make install命令,表示编译并安装

      查看安装:pcre-config --version

    ② 安装其他依赖(这个是上一步依赖库执行的命令)

      yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

    ③ 安装nginx

      步骤同①

      这里要注意,我使用的是root账号登录的,我的压缩包及解压后的文件在 root/usr/src 下面,而安装完成之后,我的 nginx 安装在了共享文件的 usr/local 下

      安装成功之后,在共享文件中, usr/local/nginx 文件夹自动生成

      启动:cd 至usr/local/nginx/sbin 文件夹下,使用命令 ./nginx 启动,启动后使用 ps -ef | grep nginx 查看nginx的进程

      我这里遇到了问题,nginx已启动,但是我在本地的web中访问不了,执行以下操作后就好了:

        第一步,对80端口进行防火墙配置:  firewall-cmd --zone=public --add-port=80/tcp --permanent

        第二步,重启防火墙服务:  systemctl restart firewalld.service

  (2)nginx常用命令

    必须进入nginx的目录:usr/local/nginx/sbin

    ① 查看nginx版本号

      ./nginx -v

    ② 启动

      ./nginx

    ③ 关闭

      ./nginx -s stop

    ④ 重新加载

      ./nginx -s reload

    ⑤ 查看nginx进程

      ps -ef | grep nginx

    文件编辑:

      i 进入编辑模式
      esc 退出编辑模式
      :wq 退出并保存
      :q! 退出不保存

  (3)ngin配置文件

    配置文件位置:  usr/local/nginx/conf/nginx.conf

    配置文件组成(三部分):

      全局块:从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令

        worker_processes  1;  值越大,可以支持的并发处理量越多

      events块:主要影响 nginx 服务器与用户的网络连接:  

        worker_connections 1024;  支持的最大连接数

      http块:代理、缓存、日志等绝大多数功能和第三方模块的配置都在这里,也可以包括 http 全局块、events块

3、nginx配置实例(反向代理)

  首先熟悉几个命令:

    开放端口号:  firewall-cmd --add-port=8080/tcp --permanent

    重启防火墙:  systemctl restart firewalld.service  或者  firewall-cmd --reload

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

  实例一:从 www.123.com 到 192.168.3.124:8081(tomcat)

    访问过程分析:

      windows 中的浏览器(www.123.com)

      nginx(192.168.3.124)

      tomcat(192.168.3.124:8081)

    具体步骤:

      修改本地文件 C:\Windows\System32\drivers\etc\hosts,最后添加 192.168.3.124  www.123.com ,意思是将www.123.com的请求改为 192.168.3.124

      修改 nginx 配置文件:上边的意思是,访问192.168.3.124,其实就是访问本机;下边的意思是,将请求发送到 localhost:8081

        Nginx

   实例二:

    http://192.168.3.124:9001/edu/a.html  访问到  192.168.3.124:8081

    http://192.168.3.124:9001/vod/a.html  访问到  192.168.3.124:8082

    准备:两个 tomcat 启动,然后再 tomcat 的 webapps 目录下添加 a.html 文件,里面内容分别为:8081端口、8082端口

    配置 nginx:再 http 块添加 server,意思为:访问 192.168.3.124:9001 时,如果连接中带有 edu,则访问 8081端口服务;如果连接中带有 vod,则访问 8082端口服务;这里的 ~ /***/ 是正则表达式

      Nginx

   然后分别访问:http://192.168.3.124:9001/edu/a.html、http://192.168.3.124:9001/vod/a.html

  (这里一定要注意:8081、8082、9001端口都必须开放,不然怎么都访问不到)

4、nginx配置实例(负载均衡)

  启动两个 tomcat,将 vod 文件夹重命名为 edu

  配置 nginx.conf 文件

  Nginx

   这里有人会遇到只能访问一个tomcat的情况,加上一行这个配置就好了:lacation /favicon.ico{} ,这是为啥呢?

  打开F12看到下图,因为每次访问 a.html 的时候,轮询到8081,然后访问 favicon.ico (这个是网页左上角的图标)的时候访问的是 8082,于是乎,循环开始了!自己在看到的每次都是同一个tomcat。加上上面的配置,意思是不去拿这个图标,就可以正常了。

  Nginx

 

  nginx 分配服务器策略:  

    轮询:轮着来,默认

    权重:weight=1,权重越高,访问次数越多

    ip_hash:某个IP地址第一次访问的哪个端口,以后永远都访问这个地址,在 myserver 中添加一行 ip_hash;

    fair:按照服务器的响应时间分配,响应时间越短优先级越高,在 myserver 中添加一行 fair;

5、nginx配置实例(动静分离):跟实例二差不多,当访问 ip:sort/data/ 的时候,代理到 www 或者 image 文件夹,从这两个文件夹下取需要的数据(一个静态数据,一个动态数据)

  Nginx

6、配置高可用集群

  两个 nginx(两台虚拟机),一个主服务器,一个备用服务器;一般情况下,通过主服务器代理,当主服务器宕机的时候,通过备用服务器代理。

  两台虚拟机都安装 keepalived

    使用命令:yum install keepalived -y  安装完成后使用命令查看:rpm -p -a keepalived

    完成后,在 etc 文件夹下会生成目录,里面有配置文件 keepalived.conf

  开始配置:

    修改/etc/keepalived/keepalivec.conf 配置文件(红色为修改部分):  

    #全局配置

    global_defs {
      notification_email {
        acassen@firewall.loc
        failover@firewall.loc
        sysadmin@firewall.loc
      }
      notification_email_from Alexandre.Cassen@firewall.loc
      smtp_server 192.168.17.129
      smtp_connect_timeout 30
      router_id LVS_DEVEL # 通过这个名字,可以访问到主机,在虚拟机中打开 etc/hosts,最后一行添加:
      Nginx
    }
 
    # 脚本配置
    vrrp_script chk_http_port {
      script "/usr/local/src/nginx_check.sh"
      interval 2 #(检测脚本执行的间隔)
      weight 2 # 权重
    }
 
    # 虚拟IP
    vrrp_instance VI_1 {
      state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
      interface ens33 //网卡
      virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
      priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
      advert_int 1 # 发送心跳间隔
      authentication { #检验方式
        auth_type PASS #密码
        auth_pass 1111
      }
      virtual_ipaddress {
        192.168.3.50 // VRRP H 虚拟地址
      }
    }
 
  
  在/usr/local/src 添加检测脚本(nginx_check.sh):
  
    #!/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
  
  启动 nginx 和 keepalived,keepalived 启动方式:systemctl start keepalived.service,停止方式:systemctl stop keepalived.service
  然后访问自己设置的虚拟地址进行访问,停止主服务的 nginx 和 keepalived 再次测试

7、nginx原理

  Nginx

  nginx 有两个进程,一个master,多个 worker,master 负责分配任务(管理、监控),worker 负责具体任务的执行

  Nginx

 

  nginx 中的 worker 是争抢的模式

   Nginx

  一个 masker,多个 worker 的好处:

    可以使用命令 ./nginx -s reload 热部署

    每个 worker 都是独立的进程,如果其中一个 worker 出现了问题,其他 worker 独立的,继续进行争抢,实时请求过程,不会造成服务中断。

  设置多少个 worker 合适

    worker 数和服务器的 cpu 数相等是最适宜的

 

Nginx

上一篇:硒鼓带芯片和不带芯片有什么区别


下一篇:比较版本号 -- LeetCode -- 9.1