5.31 Nginx最全面知识

 

 

  1. nginx是什么

    1. nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定,所以现在很多知名的公司都在使用nginx。
  2. nginx的优点

    1. 占内存小,可以实现高并发连接、处理响应快。
    2. 可以实现http服务器、虚拟主机、反向代理、负载均衡。
    3. nginx配置简单
    4. 可以不暴露真实服务器IP地址
  3. 应用场景

    1. http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
    2. 虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
    3. 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
  4. 这个技术的核心和原理

    1. nginx可实现的功能

      1. nginx实现反向代理
        1. 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器
          1. 启动一个Tomcat 127.0.0.1:8080,使用nginx反向代理 8080.baidu.com 直接跳转到127.0.0.1:8080
          2. Host文件新增:
          3. 127.0.0.1 8080.baidu.com    127.0.0.1 8081.baidu.com   
          4. nginx.conf 配置
        2. 反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。
        3. 我们只 需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。
      2. nginx实现负载均衡
        1. 负载均衡是什么?
          1. 负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
          2. 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
      3. nginx解决网站跨域问题
      4. nginx配置防盗链
      5. nginx配置DDOS
        1. 限制请求次数和速度
      6. 动静分离
        1. 为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速 度。降低原来单个服务器的压力。
    2. Nginx 的原理

      1. mater 和 worker
        1. nginx 启动后,是由两个进程组成的。master(管理者)和worker(工作者)。
        2. 一个nginx 只有一个master。但可以有多个worker
        3. 过来的请求由master管理,worker进行争抢式的方式去获取请求。
      2. master-workers 的机制的好处
        1. 首先,对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销, 同时在编程以及问题查找时,也会方便很多。
        2. 可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作
        3. 其次,采用独立的进程,可以让互相之间不会 影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的 worker 进程。当然,worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当 前 worker 上的所有请求失败,不过不会影响到所有请求,所以降低了风险。
      3.  设置多少个 worker
        1. Nginx 同 redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进 程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话 下。每个 worker 的线程可以把一个 cpu 的性能发挥到极致。所以 worker 数和服务器的 cpu 数相等是最为适宜的。设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗。
        2. worker 数和服务器的 cpu 数相等是最为适宜
      4.  连接数 worker_connection
        1. 第一个:发送请求,占用了 woker 的几个连接数?2 或者 4 个
        2. 第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的 最大并发数是多少?
          1. 普通的静态访问最大并发数是: worker_connections * worker_processes /2,
          2. 而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4
  5. 这个技术的使用方式

    1. 在linux上使用和安装

      1. 在Centos下,yum源不提供nginx的安装,可以通过切换yum源的方法获取安装。也可以通过直接下载安装包的方法,以下命令均需root权限执行:
      2. 首先安装必要的库(nginx 中gzip模块需要 zlib 库,rewrite模块需要 pcre 库,ssl 功能需要openssl库)。选定/usr/local为安装目录,以下具体版本号根据实际改变。
    2. Nginx 的常用命令和配置文件

      1. 自动生成/usr/local/nginx/目录
        1. ./nginx -v 查看版本
        2. ./nginx 启动
        3. ./nginx -s stop 关闭
        4. ./nginx -s reload 重新加载
        5. ./nginx -t 检查是否正常
        6. pkill ./nginx 强制杀进程
      2. 配置文件/usr/local/nginx/conf/nginx.conf目录文件
        1. nginx 的组成部分nginx 文件结构
          1. 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
          2. events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
          3. http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
          4. server块:配置虚拟主机的相关参数,一个http中可以有多个server。
          5. location块:配置请求的路由,以及各种页面的处理情况
        2. 几个常见配置项
          1. 1.$remote_addr 与 $http_x_forwarded_for 用以记录客户端的ip地址;
          2. 2.$remote_user :用来记录客户端用户名称;
          3. 3.$time_local : 用来记录访问时间与时区;
          4. 4.$request : 用来记录请求的url与http协议;
          5. 5.$status : 用来记录请求状态;成功是200;
          6. 6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;
          7. 7.$http_referer :用来记录从那个页面链接访问过来的;
          8. 8.$http_user_agent :记录客户端浏览器的相关信息;
      3. 配置集群方式

        1. Nginx 反向代理
          1. 实现:浏览器地址栏输入地址 www.123.com,跳转到 liunx 系统 tomcat 主页 面中
          2. 准备工作:Tomcat安装
            1. a. 第一步 在 windows 系统的 host 文件进行域名和 ip 对应关系的配置
            2. 第二步 在 nginx 进行请求转发的配置(反向代理配置)
            3. 最终测试
        2. Nginx + Keepalived高可用集权
          1. Keepalived是什么
            1. 一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。
          2. 配置准备
            1. 需要两台nginx 服务器
            2. 需要keepalived
            3. 需要虚拟IP
          3. 配置高可用的准备工作
            1. 需要两台服务器 208.208.128.122 和 208.208.128.85
            2. 在两台服务器安装 nginx(流程最上面有)第二台服务器的默认端口 改为 9001 ,运行并测试,
            3. 在两台服务器安装 keepalived
              1. 安装之后,在 etc 里面生成目录 keepalived,有文件 keepalived.conf 。这个就是主配置文件。主从模式主要在这个文件里配置。
              2. 修改/etc/keepalived/keepalivec.conf 配置文件
              3. 在/usr/local/src 添加检测脚本
              4. 开启nginx 和 keepalived
              5. 在浏览器地址栏输入 虚拟 ip 地址 192.168.17.50测试
        3. Nginx 动静分离
          1. Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种:
            1. 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
            2. 另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。
        4. Nginx 负载均衡 配置实例
          1. nginx 分配服务器策略随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个很陌生的话题, 顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应 足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品, 很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎, nginx 就是其中的一个,在 linux 下有 Nginx、LVS、Haproxy 等等服务可以提供负载均衡服 务,而且 Nginx 提供了几种分配方式(策略):
            1. 轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
            2. weight:weight 代表权重, 默认为 1,权重越高被分配的客户端越多
            3. ip_hash:ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
            4. fair(第三方):fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配。
posted @ 2020-10-11 18:24  Smileing  阅读(150)  评论(0编辑  收藏  举报