Nginx

Nginx

介绍

  1. Nginx:

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

  2. 代理:增强目标对象功能

    • 正向代理:是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。(翻墙)

    • 反向代理:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

优点:

  1. 可以高并发连接

    • 官方测试Nginx能够支撑5万并发连接,实际生产环境中可以支撑2~4万并发连接数。

  2. 内存消耗少

  3. 成本低廉

  4. 配置文件非常简单

  5. 支持Rewrite重写

    • 能够根据域名、URL的不同,将http请求分到不同的后端服务器群组。

  6. 内置的健康检查功能

    • 如果NginxProxy后端的某台Web服务器宕机了,不会影响前端的访问。

  7. 节省带宽

  8. 稳定性高

    • 用于反向代理,宕机的概率微乎其微。

  9. 支持热部署

工作原理

  • Nginx是由内核和模块组成的。其中,内核的设计非常的微小和简洁,完成的工作也非常的简单,仅仅通过查找配置文件将客户端的请求映射到location block(location是Nginx配置中的一个指令,用于URL匹配)而在这个location中配置的每个指令将会启动不同的模块完成相应的工作。

  • 核心模块:HTTP模块、Event模块、Mail模块

  • 基础模块:HTTP Access模块、HTTP FastCGl模块、HTTP Proxy模块、HTTP Rewrite模块

  • 第三方模块:HTTP Request Hash模块、Notice模块、HTTP Access Key模块

  • Nginx的高并发优势得益于采用epoll模型,于传统的服务器类型不一致(程序的架构不同)

  • epoll模型是在linux内核2.6以后才有的,异步非阻塞

  • 而Apache服务器采用的是select模型

  • epoll模型原理:对于事件句柄的选择不是遍历所有事物通知而是事件响应的,就是句柄事件上来立马选择出来,不需要遍历整个事件句柄链表,因此效率特别高

  • select模型原理:select选择句柄的时候,是遍历所有的句柄,也就是说句柄有事件响应时,select需要遍历所有的句柄才能获得哪些句柄上有事件通知,因此效率非常低。

安装配置(linux版)

  1. 下载Nginx :wget http://nginx.org/download/nginx-1.13.0.tar.gz

  2. 解压

  3. 编译:切换nginx安装目录,编译指令./configure

  4. 解决编译器找不到问题:

    1. yum install gcc gcc-c++ ncurses-dev perl

    2. yum install pcre pcre-devel

    3. yum install zlib gzip zlib-devel

  5. 重新编译

  6. 安装Nginx服务:make & make install

  7. 启动Nginx服务:进入sbin里,./nginx

  8. 查看是否启动成功:ps -ef | grep nginx

常用命令

  1. 重启nginx:./nginx -s reload

  2. 关闭nginx:./nginx -s stop

Nginx管理虚拟机

  1. 三大配置

    1. 基于域名的虚拟机配置

      1. 进入配置文件 vi /usr/local/nginx/conf/nginx.conf

      2. server {
               listen 80;
               server_name zhiyou100.com;
           location / {
               root view;
               index login.html;
           #在Nginx的安装目录下 建个view目录,在里面存个login.html文件
          }
  2. 重启Nginx

    1. 进入sbin目录:./nginx -s reload

  3. 配置本地域名映射

    1. 进入微软的C:WindowsSystem32driversetc目录

      1. 编辑hosts文件 添加192.168.75.128 zhiyou100.com

  4. 基于端口号的虚拟机配置

  5. 基于IP的虚拟机配置

    1. server_name 字段 同样可以存放IP地址(虚拟机的IP地址)

负载均衡

  1. 企业中在解决高并发问题,一般有两种方向的处理策略:软件和硬件

  2. 从硬件上面来说,公司会添加负载均衡器来分发大量请求

  3. 从软件方面来说,公司解决高并发瓶颈处:数据库+web服务器两处添加解决方案

  4. 其中web服务器是最常用的一种解决方案,添加负载均衡就是使用Nginx实现负载均衡

负载均衡的作用

  1. 转发功能

    • 按照一定的算法(轮询、权重)将客户端请求转发到不同的应用服务器上面,减轻单个服务器的压力,提高系统的并发质量。

  2. 故障排除

    • 通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器宕机了,自动的将请求转发到其他的应用服务器上面

  3. 恢复添加

    • 如果检测到发生故障的应用服务器恢复工作,那么它会自动把恢复的应用服务器添加进去。

搭载负载均衡

  1. 克隆虚拟机

    1. 打开虚拟机,确保虚拟机处于关机状态

    2. 点击拍摄快照,定义名字

    3. 点击克隆

    4. 点击下一步后,选择创建完整克隆-->指定克隆虚拟机的镜像位置

    5. 修改虚拟机名称:

      hostnamectl set-hostname slave1(虚拟机名称)

    6. 查看名称是否修改成功:hostname

    7. 重新启动虚拟机:reboot

  2. 搭建tomcat集群开发步骤

    1. 开启三个tomcat,每个虚拟机都启动

      1. 查看tomcat是否启动成功,输入jps,出现bootstrap就说明启动成功

  3. 配置Nginx的核心配置文件

    1. #配置多个tomcat所在的服务器IP
      upstream tomcatServer1{
      server 192.168.75.129:8080 weight=3; #ip和端口号 权重 red
      server 192.168.75.128:8080; #yellow
      server 192.168.75.130:8080 weight=5;
      }
      server{
      listen 80;
      server_name zhiyou200.com;
      location / {
      proxy_pass http://tomcatServer1; #代理
      }
      }
    2. 配置web服务器集群的时候,在nginx中可以设置几个变量或者参数

      1. weight (权重) :值越大,承担负载均衡的压力就越大(访问次数增多)

        • 按照配置文档中设置就是 1+3+5 =9,访问zhiyou200.com网页9次中,其中背景为红色的页面一共出现三次,黄色页面为一次,白色页面为五次

      2. max_fails :允许失败的最大请求次数

      3. backup (闲置,备用机): 其他所有的非backup服务器宕机或者忙机状态的时候,请求backup指定的服务器

      4. fail_timeout : 失败超时时间

  4. 部署项目

    1. 第一步

      • 修改tomcat的配置文件server.xml /usr/local/tomcat/conf/server.xml

      • 修改tomcat默认的访问项目名称和项目的发布路径,docBase就是war包名称(虚拟目录/项目名称)

        <Context path="" docBase="video" reloadable="true"/>

    2. 第二步

      • 修改springmvc配置文件,指定默认的访问路径

      • <mvc:view-controller path="/" view-name="forward:/front/user/index.do"/>

      • 然后重新打成war包

    3. 第三步

      • 修改nginx的配置文件 nginx.conf

      • #配置多个tomcat所在的服务器IP
           upstream tomcatServer1{
               server 192.168.75.129:8080 weight=3; #ip和端口号 权重
               server 192.168.75.128:8080;
               server 192.168.75.130:8080 weight=5;
               ip_hash;#可以解决session共享
              }
           server{
               listen 80;
               server_name zhiyou200.com;

               location /{
                       proxy_pass http://tomcatServer1; #代理
                       index /;#添加上该行    
              }
              }
    4. 第四步

      1. 解决样式找不到问题

        1. 如果把tomcat的端口号改为80,样式就可以显示出来,但是这会和nginx的端口号产生冲突,所以一般不把开启nginx的那台服务器去打开tomcat

        2. 然后把tomcat的配置文件的端口号改为80,上面的server路径的端口号也改为80

原文地址:https://www.cnblogs.com/---------zjh---------/p/13644630.html