• Nginx 简介与安装


    1,简介

    Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好.中国大陆使用nginx网站用户有:新浪、网易、 腾讯等。
    Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:
    作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.
    作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
    作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
    Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。
    Nginx一般用户七层负载均衡,其吞吐量有一定的限制。为了提高整体的吞吐量,会在DNS和Nginx之间引入LVS(软件负载均衡器)、F5(硬负载均衡器) 可以做四层负载均衡,首先DNS解析到LVS(F5),让后LVS(F5)转发给Nginx,在有Nginx转发给真实的服务器

    2,安装(windows)

    解压之后,双击nginx.exe,看到一闪而过,浏览器输入127.0.0.1,出现以下界面代表安装成功

    linux 安装:https://www.cnblogs.com/pickKnow/p/11224225.html

    3,Ngnix 相关命令

        验证配置是否正确: nginx -t

        查看Nginx的版本号:nginx -V

        启动Nginx:start nginx

        快速停止或关闭Nginx:nginx -s stop

        正常停止或关闭Nginx:nginx -s quit

        配置文件修改重装载命令:nginx -s reload

    4,Nginx应用场景

    1、http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。

    2、虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。

    3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。

    4、Nginx 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。

    静态资源:Ngnix 目录下的tml 目录存放了静态资源

    虚拟主机配置:

    1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站

    2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台

    3、基于ip的虚拟主机

    基于域名的虚拟主机:本地模拟

        step1:C:WindowsSystem32driversetc 下的host 文件,添加已下:

            127.0.0.1 www.baiyue.com
            127.0.0.1 bbs.baiyue.com

        step2:修改nginx-1.15.0conf 文件夹下的nginx.conf 文件:

       意味着:当客户端访问Nginx的时候,拦截所有的www.baiyue.com 的域名,监听的端口号为80,最终查找路径式views/baiyue/index.html

        # 添加到虚拟主机www.baiyue.com
        server {
           listen       80;
           server_name  www.baiyue.com;
    
           location / {
               root   views/baiyue;
               index  index.html;
           }
        }
    
        # 添加到虚拟主机bbs.baiyue.com
        server {
           listen       80;
           server_name  bbs.baiyue.com;
    
           location / {
               root   views/bbs;
               index  index.html;
           }
        }

    访问:www.baiyue.com   和 bbs.baiyue.com

    基于端口的虚拟主机:

       step1:C:WindowsSystem32driversetc 下的host 文件,添加已下:

         127.0.0.1 8080.baiyue.com
         127.0.0.1 8081.baiyue.com

        step2:修改nginx-1.15.0conf 文件夹下的nginx.conf 文件:

        server {
           listen       8080;
           server_name  8080.baiyue.com;
    
           location / {
               root   views/baiyue;
               index  index.html;
           }
        }
    
        # 添加到虚拟主机www.tencent.com
        server {
           listen       8081;
           server_name  8081.baiyue.com;
    
           location / {
               root   views/bbs;
               index  index.html;
           }
        }

    访问:www.baiyue.com:8080   和 www.baiyue.com:8081

    反向代理:

    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
    简单的说就是,Ngnix 作为反向代理服务器,接收来自客户端的请求,分发给内部服务器,接收到结果之后,再返回给客户端。

     模拟:启动本地springboot 项目:

    启动完成之后:可以访问http://127.0.0.1:8080/index,页面出现自己设计的返回页面

    配置本地host:,将之前的注释掉,以免影响测试

    127.0.0.1 www.baiyue.com
    #127.0.0.1 bbs.baiyue.com
    #127.0.0.1 8080.baiyue.com
    #127.0.0.1 8081.baiyue.com

    配置nginx.conf 反向代理:主要的配置proxy_pass 当监听到域名式www.baiyue.com 端口8080 时,分发到内部的实际服务器地址127.0.0.1:8080,就能返回到本地项目访问的页面了

        server {
           listen       8080;
           server_name  www.baiyue.com;
    
           location / {
               proxy_pass http://127.0.0.1:8080;
               index  index.html index.htm;
           }
        }

    location的语法
    已=开头表示精确匹配
    如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。

    ^~ 开头表示uri以某个常规字符串开头,不是正则匹配

    ~ 开头表示区分大小写的正则匹配;

    ~* 开头表示不区分大小写的正则匹配

    / 通用匹配, 如果没有其它匹配,任何请求都会匹配到

    负载均衡:

    load Balance,是指在高并发情况下,可以使用Nginx 实现分流,将请求分发到不同的服务器,减小单个服务器的压力。

    在Nginx 配置负载均衡就是要配置Upstream server(上游服务器,就是Ngnix最后真实访问的服务器),因为会配置集群,所以所多台upstream server

    配置多台upstrem server 的好处,或者说Nginx 负载均衡的好处:

         1,实现分流,减少单个服务器压力,在高并发,大流量的情况下的高访问业务

         2,集群之后,Nginx 实现故障转移,不让服务宕机,http 请求,若一台服务器发生故障,可以直接转移到下一台服务器,以便请求继续

    模拟负载均衡,本地开启俩两个服务,端口为8080,8082,配置Nginx 负载均衡,让其分发到不到的服务上:

    C:WindowsSystem32driversetc 下的host 文件 ,继续配置:127.0.0.1 www.baiyue.com

    配置nginx.conf 负载均衡,主要式配置上游服务器,和proxy_pass

        # 配置上游服务器
        upstream  backServer{
            server 127.0.0.1:8080;
            server 127.0.0.1:8082;
        }
        
        server {
           listen       80;
           server_name  www.baiyue.com;
    
           location / {
               proxy_pass http://backServer;
               index  index.html index.htm;
           }
        }

    这时候,访问http://www.baiyue.com/index 地址的时候,Nginx 会采用轮询 机制,轮流分发到不同的额服务器上,所以点击一次,显示的是8080 服务上的内容,再点击,显示的是8082 服务的内容

     Nginx 负载均衡包含的算法:

    1、轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。
    2、weight(轮询权值)
    weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

    权重越高,分发到这台服务器的机会(次数)就越高

      # 配置上游服务器
        upstream  backServer{
            server 127.0.0.1:8080 weight=1;
            server 127.0.0.1:8082 weight=2;
        }
        
        server {
           listen       80;
           server_name  www.baiyue.com;
    
           location / {
               proxy_pass http://backServer;
               index  index.html index.htm;
           }
        }

    设置之后,当Nginx 接收到请求之后,分配给8082 所在的服务器要多一点

    3、ip_hash
    每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。俗称IP绑定。

    访问的客户端和上游服务器进行绑定,以后每次这个客户端发起的请求,都交给这台服务器来处理

        # 配置上游服务器
        upstream  backServer{
            server 127.0.0.1:8080;
            server 127.0.0.1:8082;
            ip_hash;
        }
        
        server {
           listen       80;
           server_name  www.baiyue.com;
    
           location / {
               proxy_pass http://backServer;
               index  index.html index.htm;
           }
        }

    配置ip_hash; 之后,本地测试每次访问都是访问同一个服务,因为已经进行了ip绑定

    4、fair(第三方)
    比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间 来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream_fair模块。

    5、url_hash(第三方)
    按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包。

    5 配置Nginx 故障转移

      模拟,当本地两台服务有一台挂了之后,会根据你设置的等待时候,在几秒之后分发给下一台服务器,如果不设置时间,他会一直等待

        # 配置上游服务器
        upstream  backServer{
            server 127.0.0.1:8080;
            server 127.0.0.1:8082;
        }
        
        server {
           listen       80;
           server_name  www.baiyue.com;
    
           location / {
               proxy_pass http://backServer;
                ###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手等候响应超时时间
                proxy_connect_timeout 3s;
                ###nginx发送给上游服务器(真实访问的服务器)超时时间
                proxy_send_timeout 3s;
                ### nginx接受上游服务器(真实访问的服务器)超时时间
                proxy_read_timeout 3s;
               index  index.html index.htm;
           }
        }
  • 相关阅读:
    SSM框架整合步骤
    Spring-data-jpa
    allure定制报告
    pytest常用选项
    staticmethod&classmethod&property
    __slot__
    python的参数传递
    闭包和装饰器
    内置高阶函数
    str
  • 原文地址:https://www.cnblogs.com/pickKnow/p/11206461.html
Copyright © 2020-2023  润新知