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

 
原文地址:https://www.cnblogs.com/balfish/p/4834764.html