反向代理(Reverse Proxy)方式是指以代理服务器接收internet上的链接请求,而后将请求转发给内部网络上的服务器,并将从服务器上获得的结果返回给internet上请求链接的客户端,此时代理服务器对外就表现为一个服务器html
从上图能够看出:反向代理 服务器位于网站机房,代理网站Web服务器接收http请求,对请求进行转发.前端
(1) 保护网站安全:任何来自Internet的请求都必须先通过代理服务器mysql
(2) 经过配置缓存功能加速Web请求:能够缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力nginx
(3) 实现负载均衡:充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力sql
对于同一个连接中的数据包,负载均衡回将其进行NAT转换后,转发至后端固定的服务器进行处理,这是负载均衡最基本,最原始的功能。负载均衡系统内部会专门有一张表来记录这些链接的情况,包括【源IP: 端口】【目的IP: 端口】【服务器IP: 端口】,空闲超时时间(Idle Timeout)等json
因为负载均衡内部记录链接状态的这张表须要消耗系统的内部资源。所以这张表不可能无限大,全部厂家都有必定的限制。这张表的大小通常称之为最大并发链接数,也就是系统同时可以容纳的链接数量。考虑到创建这些链接的客户端或服务器会发生一些异常状况,致使这些链接不能被正常终结掉,所以负载均衡的当前链接状态表项中,设计了一个空闲超时时间的参数。这个参数定义为,当该链接在必定时间内无流量经过时,负载均衡会自动删除该链接条目,释放系统资源。后端
https://kb.cnblogs.com/page/559213/ 这个再好好看看浏览器
nginx是一款轻量级的网页服务器,反向代理器以及电子邮件代理服务器,其将源代码以类BSD许可证的形式发布,因它的稳定性,丰富的功能集,实例配置文件和低系统资源的消耗而闻名.缓存
说道Web服务器,Apache服务器和IIS服务器是两大巨头,可是运行速度更快,更灵活的对手nginx正在迎头遇上tomcat
(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)稳定性高:用于反向代理,宕机的几率微乎其微。
-- 启动
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是一个高效的服务器,可是若是只是安装没有进行什么配置,只能承受1024个并发请求。那么如何可让nginx轻松应对5000甚至10000的高并发呢
(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.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_connectionsmulti_accept on;}http {keepalive_timeout 0;}重启nginxservice nginx restart