美文网首页
day44 Nginx介绍、安装及实践

day44 Nginx介绍、安装及实践

作者: 1220 | 来源:发表于2019-04-30 17:16 被阅读0次

    Nginx介绍

    1.Nginx是一款开源的,支持高性能,高并发的www.服务和代理服务软件
    Nginx (“engine x”) 是一个开源的、支持高性能、高并发的WWW服务和代理服务软件。
    它是由俄罗斯人IgorSysoev开发的,最初被应用在俄罗斯的大型网站www.rambler.ru上。
    后来作者将源代码以类BSD许可证的形式开源出来供全球使用。
    3 月 11 日,F5 与 NGINX 宣布了一项最终协议,根据该协议,F5 将收购 NGINX 的所有已发行股票,总价值约为 6.7 亿美元。
    F5 是应用交付网络(ADN)领域的全球领先厂商,其解决方案有助于整合不同的技术,以便更好地控制基础架构,提高应用交付和数据管理能力,并使用户能够通过企业桌面系统和智能设备无缝、安全并更快速地接入应用。
    而 NGINX 最知名产品 Nginx 是互联网上最受欢迎的 Web 服务器之一,NGINX 提供一整套用于开发和交付现代应用的技术,同时它也是应用交付领域的开源领导者。
    收购声明指出,此次战略收购和有机投资,将确保长期收入和每股盈利增长;F5 和 NGINX 将在所有环境中实现多云应用服务,提供开发人员所需的易用性和灵活性,同时还提供网络运营团队所需的规模、安全性和可靠性等能力。
    收购完成后,Nginx 管理层将加入 F5,现有的办事处也将继续保持开放。为了收购 Nginx,F5 Networks 筹集了 1.03 亿美元的资金,投资者中包括高盛、澳洲电信风投、以及新企业协会。

    2.Nginx3大主要功能

    1)网页服务:自身是静态 web服务apache,lighttpd, IIs
    还支持动态web服务
    PHP(fastcgi _pass)JAVA(proxy_pass) Python(uwsgi_pass)
    2)负载均衡\反向代理haproxy,lvs, F5,netscaler.
    只支持http,现在tcp/udp。
    3)缓存服务器 squid, varnish
    3.特点:
    2008年才开始使用,当时Apache是老大
    使用量 Apache43% Nginx 42%
    静态小文件高并发,占用资源少,软件本身小。
    特点:静态小文件高并发,占用资源少。软件本身小。

    3、企业面试时需要解答如下Nginx HTTP服务器的特色及优点:

    1)支持高并发:能支持几万并发连接(特别是静态小文件业务环境)
    2)资源消耗少:在3万并发连接下,开启10个Nginx线程消耗不到200MB内存。
    3)可以做HTTP反向代理及加速缓存,即负载均衡功能,内置对Rs节点服务器健康检查功能,这相当于专业的haproxy软件或1vs的功能具备squid等专业缓存软件等的缓存功能。

    4.Nginx作为web服务器的主要应用场景:

    1)静态web服务器
    使用Nginx运行HTML. JS.CsS、小图片等静态数据(此功能类似lighttpd软件)。
    2)配合运行动态Web服务器:
    Nginx结合FastCGI运行PHP等动态程序(例如使用fastcgi pass方式)
    Nginx结合proxy pass支持Java动态程序(tomcat/resin服务)。
    Nginx结合uwsgi pass支持Python。
    3)反向代理/负载均衡
    4)做web缓存服务器(把文件放入内存里)。
    京东之前就是用Nginx做web缓存

    5.反向代理与负载均衡

    代理:海外代购,微商:代理:代替别人做事。
    正向代理:由内向外。代替效率低代替局域网内PC,请求外部应用服务。
    反向代理:由外向内代替效率低代替外部的用户请求内部的应用服务器。
    负载均衡:转发。甩手掌柜。效率高

    6·为什么Nginx总体性能比Apache高?

    Nginx使用最新的epoll (Linux2.6内核)和kqueue (freebsd)异步网络1/0模型,而Apache则使用的是传统的select模型。目前1inux下能够承受高并发访问的Squid. Memcached软件都采用的是epol1模型.
    Apache则使用的是传统的select模型,Nginx使用最新的epol1模型1
    select模型:伙伴去宿舍找你,一个一个找。。效率低
    epoll模型:伙伴去宿舍找你,先问宿管大妈,看一下你在哪间宿舍,然后直接去你宿舍找你。。效率高。

    7.软件安装

    Linux系统如何安装软件?

    1、rpm安装简单快。依赖多,解决依赖困难繁琐。
    2、yum安装*****简单快, 自动解决依赖。不能选择软件版本或软件存放路径。
    3、编安装(源码编译) *****.慢复杂需要GCC编译器,可以自定义安装(版本、软件路径)
    4、将源码制作成rpm,然后放到yum仓库,实现yum自动安装。一次性慢复杂,安装快,可以自定义安装(版本、软件路径)
    5、二进制安装

    8.Nginx安装两种方法:

    yum安装:
    epel源:版本低
    nginx官方源:版本高

    8.1编译安装:

    1,安装Nginx所需的pcre库Pcre全称(Perl Compatible Regular Expressions) ,中文"perl兼容正则表达式",官方站点为http://www.pcre.org/,安装pcre库是为了使Nginx支持具备URI重写功能的 Rewrite模块,如果不安装pcre库,则Nginx无法使用Rewrite模块功能, Nginx的Rewrite模块功能几乎是企业应用必须。安装pcre库的过程如下

    8.2 编译安装(和8.1二选一)

    pcre:URL重写软件,即实现伪静态需要这个软件

    下载:

    mkdir -p /server/tools
    cd /server/tools
    wget http://nginx.org/download/nginx-1.16.0.tar.gz

    安装依赖。

    yum install pcre pcre-devel -y
    yum install openssl openssl-devel -y #https加密用他。

    编译安装步骤

    tar xf nginx-1.16.0.tar.gz
    cd nginx-1.16.0/
    useradd -s /sbin/nologin www -M
    id www
    ./configure --user=www --group=www --prefix=/application/nginx-1.16.0/ --with-http_stub_status_module --with-http_ssl_module --with-pcre
    make
    make install
    ln -s /application/nginx-1.16.0/ /application/nginx
    /application/nginx/sbin/nginx
    netstat -lntup|grep nginx

    注意:

    1)每一步结尾直接echo $?验证是否正确。返回0代表步骤正确
    2)验证最终的安装是否正确。
    wget 10.0.0.8
    curl 10.0.0.8

    configure参数的作用

    参数 意思
    --prefix=PATH 路径
    --user=USER 用户
    --group=GROUP
    --with-pcre 伪静态
    --with-http_stub_status_module 状态
    --with-http_ssl_module 加密 443

    编译安装配置:

    [root@web02 /application/nginx]# tree
    .
    ├── conf
    │   ├── fastcgi.conf         #和动态服务的接口配置参数,配合php
    │   ├── fastcgi.conf.default
    │   ├── fastcgi_params 
    │   ├── fastcgi_params.default
    │   ├── koi-utf
    │   ├── koi-win
    │   ├── mime.types            #媒体类型
    │   ├── mime.types.default
    │   ├── nginx.conf            #主配置文件
    │   ├── nginx.conf.default
    │   ├── scgi_params
    │   ├── scgi_params.default   #和动态服务的接口配置参数
    │   ├── uwsgi_params
    │   ├── uwsgi_params.default  #和动态服务的接口配置参数,配合Python
    │   └── win-utf
    ├── fastcgi_temp
    ├── html            #默认站点目录。  
    │   ├── 50x.html
    │   └── index.html  #默认的首页,10.0.0.8不指定文件,默认加载index.html首页。
    ├── logs
    │   ├── access.log  #访问日志
    │   ├── error.log   #Nginx错误日志。
    │   └── nginx.pid   #进程号对应文件。
    ├── sbin
    │   └── nginx       #启动命令。
    

    yum安装配置路径:

    [root@web01 ~]# rpm -ql nginx
    /etc/logrotate.d/nginx
    /etc/nginx          
    /etc/nginx/conf.d
    /etc/nginx/conf.d/default.conf
    /etc/nginx/fastcgi_params
    /etc/nginx/koi-utf
    /etc/nginx/koi-win
    /etc/nginx/mime.types
    /etc/nginx/modules
    /etc/nginx/nginx.conf
    /etc/nginx/scgi_params
    /etc/nginx/uwsgi_params
    /etc/nginx/win-utf
    /usr/sbin/nginx
    /usr/sbin/nginx-debug
    /usr/share/nginx/html
    /usr/share/nginx/html/50x.html
    /usr/share/nginx/html/index.html
    /var/cache/nginx
    /var/log/nginx
    

    实验一下

    编译为主:编译后需要平滑重启一下

    [root@web01 /application/nginx/html]# vim index.html
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>HTML5 Canvas 花边图案 | 齿形花边</title>
    <style>
    body {
        width: 100%;
        height: 100%;
        position: absolute;
        left: 0;
        top: 0;
        overflow: hidden;
        margin: 0;
        background: black;
        -webkit-filter: invert(0);
        filter: invert(0);
    }
    #canvas {
        position: absolute;
        z-index: -1;
        -webkit-filter: hue-rotate(100deg) brightness(1);
        filter: hue-rotate(100deg) brightness(1);
        mix-blend-mode: difference;
    }
    #canv {
        position: absolute;
        z-index: -2;
        mix-blend-mode: lighter;
    }
    canvas {
        position: absolute;
        top: 50%;
        left: 50%;
        z-index: -1;
        -webkit-transform: translate(-50%, -50%);
        transform: translate(-50%, -50%);
    }
    </style>
    </head>
    <body>
    <canvas id='canvas'></canvas>
    <canvas id='canv'></canvas>
    <script>
    var c = document.getElementById('canv'),
        $ = c.getContext('2d'),
        w = c.width = window.innerWidth,
        h = c.height = window.innerHeight,
        t = 0,
        num = 950,
        s, a, b, u = 0,
        x, y, _x, _y,
        _t = 1 / 16;
    
    function random(min, max) {
        return Math.random() * (max - min) + min;
    }
    
    var anim = function() {
        $.globalCompositeOperation = 'multiply';
        $.fillStyle = 'hsla(258,20%,50%,1)';
        $.fillRect(0, 0, w, h);
        $.globalCompositeOperation = 'lighter';
        for (var i = 0; i < .5; i++) {
            x = 0;
            _u = (u) + i * 2, col = u + (_u * 8);
            $.beginPath();
            for (var j = 0; j < num; j++) {
                x -= .312 * Math.sin(15);
                y = x * Math.sin(i + 3.05 * t + x / 7) / 12;
                _x = x * Math.cos(b) + y * Math.sin(b);
                _y = x * Math.sin(b) - y * Math.cos(b);
                b = (j * 2.1102) * Math.PI / -.1008;
                $.arc(w / 2 - _x, h / 2 - _y, random(.001, .6), 300, Math.PI * 2 + .1);
                $.lineWidth = .2;
            }
            var g = $.createLinearGradient(w / 2 + _x, h / 2 + _y,
                1, w / 2 + _x, h / 2 + _y);
            g.addColorStop(0.2, 'hsla(' + col + ',90%,50%,.2)');
            g.addColorStop(0.9, 'hsla(' + _u + ',95%,50%,.3)');
            g.addColorStop(1, 'hsla(0,0%,100%,.4)');
            $.strokeStyle = g;
            $.stroke();
        }
        t += _t / 2;
        u -= .2;
        window.requestAnimationFrame(anim);
    };
    anim();
    
    window.addEventListener('resize', function() {
        c.width = w = window.innerWidth;
        c.height = h = window.innerHeight;
    }, false);
    
    
    var canvas, ctx, tim;
    canvas = document.getElementsByTagName('canvas')[0];
    ctx = canvas.getContext('2d');
    canvas.width = canvas.height = 400;
    baum();
    
    function baum() {
        var a, b, c, d, e, x, y, r;
        ctx.globalCompositeOperation = "source-over";
        ctx.fillStyle = "hsla(26,100%,0%,1)";
        ctx.fillRect(0, 0, canvas.width, canvas.height);
        ctx.globalCompositeOperation = "color-burn";
        tim = new Date().getTime() / Math.PI / 72;
    
        c = [];
        r = tim / 32;
        for (a = 0; a < 18; a++) {
            b = 160;
            if (a % 2 == 1) b = 100;
            x = Math.cos(r) * b;
            y = Math.sin(r) * b;
            c.push([200 + x, 200 + y]);
            r += Math.PI * 2 / 14;
        }
    
        for (a = 0; a < 7; a++) {
            b = c[a * 2];
            d = c[a * 2 + 1];
            e = c[(a * 2 + 13) % 14];
            tri([
                [200, 200], b, d
            ], 0);
            tri([
                [200, 200], b, e
            ], 0);
        }
        requestAnimationFrame(baum);
    }
    
    function tri(p, ban) {
        var a, b, c, d, e, f, x, y, han, r1, r2;
        x = y = 0;
        for (a = 0; a < 3; a++) {
            x += p[a][0];
            y += p[a][1];
        }
        x = x / 3 - canvas.width / 2;
        y = y / 3 - canvas.height / 2;
        han = Math.pow(x * x + y * y, 0.5);
        c = 0.2 + Math.sin(tim / 13) * 0.15;
        r1 = 0.5 + Math.sin(han / 20 * (1 + Math.sin(tim / 19) * 0.7) + tim / 41) * c;
        r2 = 1 - r1;
        c = p[0][0] * (p[1][1] - p[2][1]);
        c += p[1][0] * (p[2][1] - p[0][1]);
        c += p[2][0] * (p[0][1] - p[1][1]);
        c = Math.abs(c);
    
        if (c < 100) {
            if (ban % 17 == 1) {
                a = ((han + tim * 3) % 360) | 0;
                b = 0.4;
                if (ban % 12 > 8) b = 1;
    
                ctx.fillStyle = ctx.strokeStyle = "hsla(" + a * 2 + ",60%,40%,0.53)";
                ctx.beginPath();
                for (a = 0; a < p.length; a++) {
                    b = p[a];
                    ctx.globalCompositeOperation = "lighter";
                    ctx.lineTo(b[0], b[1]);
                }
                ctx.fill();
                if (Math.random() < 0.2) return;
            }
            if (ban % 50 > 28) return;
            if (c < 20) return;
        }
    
        d = 0;
        for (a = 0; a < p.length; a++) {
            b = p[a];
            c = p[(a + 1) % p.length];
            x = b[0] - c[0];
            y = b[1] - c[1];
            e = Math.pow(x * x + y * y, 0.5);
            if (e > d) {
                d = e;
                f = a;
            }
        }
    
        a = p[f];
        b = p[(f + 1) % p.length];
        c = p[(f + 2) % p.length];
        x = a[0] * r1 + b[0] * r2;
        y = a[1] * r1 + b[1] * r2;
        tri([b, c, [x, y]], ban + 1);
        tri([c, a, [x, y]], ban + 2);
    }
    </script>
    </body>
    </html>
    

    在浏览器上输入自己的本机ip

    如图:

    image.png

    相关文章

      网友评论

          本文标题:day44 Nginx介绍、安装及实践

          本文链接:https://www.haomeiwen.com/subject/uktmnqtx.html