• nginx知识


    一 反向代理

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

    从上图可以看出:反向代理 服务器位于网站机房,代理网站Web服务器接收http请求,对请求进行转发.

    二 反向代理的作用

    (1) 保护网站安全:任何来自Internet的请求都必须先经过代理服务器

    (2) 通过配置缓存功能加速Web请求:可以缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力

    (3) 实现负载均衡:充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力

    三  nginx的负载均衡

    对于同一个链接中的数据包,负载均衡回将其进行NAT转换后,转发至后端固定的服务器进行处理,这是负载均衡最基本,最原始的功能。负载均衡系统内部会专门有一张表来记录这些连接的状况,包括【源IP: 端口】【目的IP: 端口】【服务器IP: 端口】,空闲超时时间(Idle Timeout)等

    由于负载均衡内部记录连接状态的这张表需要消耗系统的内部资源。因此这张表不可能无限大,所有厂家都有一定的限制。这张表的大小一般称之为最大并发连接数,也就是系统同时能够容纳的连接数量。考虑到建立这些连接的客户端或服务器会发生一些异常情况,导致这些连接不能被正常终结掉,因此负载均衡的当前连接状态表项中,设计了一个空闲超时时间的参数。这个参数定义为,当该连接在一定时间内无流量通过时,负载均衡会自动删除该连接条目,释放系统资源。

    https://kb.cnblogs.com/page/559213/  这个再好好看看

    四  nginx的发展

    nginx是一款轻量级的网页服务器,反向代理器以及电子邮件代理服务器,其将源代码以类BSD许可证的形式发布,因它的稳定性,丰富的功能集,实例配置文件和低系统资源的消耗而闻名.

    说道Web服务器,Apache服务器和IIS服务器是两大巨头,但是运行速度更快,更灵活的对手nginx正在迎头赶上

    五 nginx的核心特点

    (1)跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本;

    (2)配置异常简单:非常容易上手。配置风格跟程序开发一样,神一般的配置;

    (3)非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。(这得益于Nginx使用了最新的epoll模型);

    (4)事件驱动:通信机制采用epoll模型,支持更大的并发连接。(总结:通过异步非阻塞的事件处理机制,Nginx实现由进程循环处理多个准备好的事件,从而实现高并发和轻量级)

    (5)Master/Worker结构:一个master进程,生成一个或多个worker进程。

    (6)内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。

    (7)内置的健康检查功能:如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响前端访问。

    (8)节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。

    (9)稳定性高:用于反向代理,宕机的概率微乎其微。

    六 实战:构建nginix+ tomcat构筑Web服务器集群的负载均衡

    -- 启动
    sudo /xxx/openresty/nginx/sbin/nginx
    
    -- 停止
    sudo /xxx/openresty/nginx/sbin/nginx -s stop
    
    -- 重新加载配置文件
    sudo /xxx/openresty/nginx/sbin/nginx -s reload




    ng 负载均衡:
    http {
        upstream myapp1 {
            server srv1.example.com;
            server srv2.example.com;
            server srv3.example.com;
        }
    
        server {
            listen 80;
    
            location / {
                proxy_pass http://myapp1;
            }
        }
    }
     




    1 安装无论使用何种方法,都需要安装 pcre 库 libpcre,这是安装nginx必须的
    2 安装 libdrizzle 1.0
    wget http://agentzh.org/misc/nginx/drizzle7-2011.07.21.tar.gz
    tar zxvf drizzle7-2011.07.21.tar.gz
    cd drizzle7-2011.07.21
    ./configure --without-server
    make libdrizzle-1.0
    make install-libdrizzle-1.0

    3 openresty重新configure一下

    ./configure --prefix=/usr/local/openresty --with-luajit --with-http_drizzle_module --with-libdrizzle=/usr/local


    #user  nobody;
    worker_processes  4;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
        keepalive_timeout  65;
        #gzip  on;
    
       upstream mysql {
            drizzle_server 127.0.0.1:3306 dbname=nginx user=root password=root protocol=mysql;
     }
    
        server {
            listen       80;
            server_name  localhost;
    
           location = /mysql-status{
            drizzle_status;
            }
    
            location  /mysql {
            drizzle_pass mysql;
            drizzle_query "select id,name,age from users where id = 1";
            rds_json on;
    }
    
           location /hello {
              default_type 'text/plain';
              content_by_lua 'ngx.say("hello, lua")';
               # root   html;
               # index  index.html index.htm;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
     

    七 单机nginx应对高并发处理

    nginx是一个高效的服务器,但是如果只是安装没有进行什么配置,只能承受1024个并发请求。那么如何可以让nginx轻松应对5000甚至10000的高并发呢

    1 系统层面

    (1) 调整同时打开文件数量
    ulimit -n 20480
    (2) TCP最大连接数(somaxconn) socat的最大连接数
    echo 10000 > /proc/sys/net/core/somaxconn
    (3) TCP连接立即回收、回用(recycle、reuse)
    echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
    echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
    (4) 不做TCP洪水抵御
    echo 0 > /proc/sys/net/ipv4/tcp_syncookies
    也可以直接使用优化后的配置,在/etc/sysctl.conf中加入:
    net.core.somaxconn = 20480
    net.core.rmem_default = 262144
    net.core.wmem_default = 262144
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    net.ipv4.tcp_rmem = 4096 4096 16777216
    net.ipv4.tcp_wmem = 4096 4096 16777216
    net.ipv4.tcp_mem = 786432 2097152 3145728
    net.ipv4.tcp_max_syn_backlog = 16384
    net.core.netdev_max_backlog = 20000
    net.ipv4.tcp_fin_timeout = 15
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_max_orphans = 131072
    net.ipv4.tcp_syncookies = 0
    使用:sysctl -p 生效
    sysctl -p

    二、nginx层面

    修改nginx配置文件,nginx.conf
    增加work_rlimit_nofile和worker_connections数量,并禁用keepalive_timeout。
    worker_processes  1; #nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数
    worker_rlimit_nofile 20000; #一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致
    events {
    use epoll;#使用epoll的I/O模型
    worker_connections 20000;#每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections
    multi_accept on;
    }
    http {
    keepalive_timeout 0;
    }


    重启nginx
    service nginx restart

     
  • 相关阅读:
    Wannafly挑战赛9
    acm之图论基础
    Codeforces Round #459 (Div. 2)
    Codeforces Round #460 (Div. 2)
    浙南联合训练赛20180129
    AtCoder Regular Contest 090
    牛客练习赛11
    2018年1月26日天梯赛练习1
    csa Round #66 (Div. 2 only)
    EOJ Monthly 2018.1
  • 原文地址:https://www.cnblogs.com/balfish/p/4834764.html
Copyright © 2020-2023  润新知