Nginx: Nginx反向代理、负载均衡、缓存、URL重写及读写分离

Nginx反向代理、负载均衡、缓存、URL重写及读写分离


设计高性能网站的时候首页静态化,都是html格式,可能有

些子版块是动态生成的,但也是缓存的。

由于网站越来越复杂,网站需要分区,分成图片组,搜索组等等:




Xcache: 缓存

Nginx特性:

map

event-driver:一个进程响应多个请求,单线程进程

aio

 

LEMP:

  Nnginx(FastCGI) + php + fps

  

  

10000个请求,才2.5M内存

 

lvs:  4层,dr模型,配置逻辑比较复杂,工作在内核的,但性能是最好的

      经过优化后,一个时间内可以转发数百万个请求,不具备检查APPServer

        状况的能力,还需要调用iodevertor

       

       

nginx: 7层,能理解具体应用协议的,工作于用户空间,一个时间内能处理上万个请求

haproxy: 7层,能理解具体的应用协议的,工作在用户空间,一个时间内能处理上万个请求

在同一个条件下,haproxy的转发能力比nginx强,但nginx对系统的资源需求量要求小,

haproxy具有缓存功能,但nginx的缓存功能乏善可陈了。

 

一般MySQL服务器,能同时处理50个请求就不错了。

 

Memcache: 公共缓存,后端查询数据库缓存,先查询Memcache,如果缓存中没有,

再查数据库。命中率达到40%左右,带整体的性能提升都是

非常明显的。

 

Xcache: 单个APP server为例,由于App Server是php服务器,

Php的执行代码要编译成opcode, 然后才能执行,第二个请求再

请求同一个页面的时候,还需要重新编译,由于每个请求是由

一个进程处理,不能共享,但使用xcache后,可以使得第一个

请求编译的opcode可以被第二个请求使用。

 

如果某个App Server挂了怎么吧?

1.可以使用持久连接,让同一个客户端的请求时钟发送到某个

服务器;如果这个服务器挂了,就会丢失这台主机的会话信息;

2.共享会话信息,通过组播的方式同步,粘性会话,小集群可以;

3.使用session共享服务器,用memcache或者redis缓存服务器。

每一个请求都会发cookia,通过cookia, 找到session。

Memcache对高可用的支持不理想,但可以很好实现分布式功能。

通过hash运行,取余,选择服务器。

如果某个key要存多个数据的时候,可以用redis。

 

 

随着访问量的增加,网站需要分块,把图片,搜索,广告等分块。

 

随着访问的增加,分发服务器会成为瓶颈,形成单点故障。

 

在分发服务器可以缓存opcode生成的结果,但转发服务器

本身就很忙,还有缓存,所以可以将缓存服务器缓存起来。

如果缓存服务器有,就由缓存服务器够着响应,如果没有则

发送到后端服务器。

 

如果第一请求后的结果,缓存在第一个缓存服务器,如果第二个请求

过来,请求访问第二个缓存服务器,则第二个缓存不能命中。

为了提高命中率,可以做持久连接(会破坏负载均衡效果),或者

数据同步。




这些APP Server都是服务动态内容的,还可以加一个服务静态内容的服务器组(varnish),如果图片的时候,转发给静态服务器组(lvs分发给varnish,varnish在分发到后端服务器)。或者增加专门图片服务器组。

如果要区分请求的资源类型,lvs是不支持的。

Nginx如果php的请求分发到后端?

Location ~* \.php${

      Fastcgi_proxy127.0.0.1:9000 

//定义方向代理,这就是反向代理

}

 

正向代理:内网的主机的80端口的请求,都发送代理服务器,代理内网主机

访问internet,再返回结果给内网主机。

反向代理:外网的主机想访问内网的主机,过程与正向代理相反。

 

Server{

      Listen 80;

   Server_namewww.magedu.com

   Location /{

          后端服务器;

}

}

怎么定义后端服务器呢?

使用方向代理:

Proxy_pass

 

 

回顾Nginx配置分段:

Main;  //全局配置,worker进程数,错误日志,

Event{

   //定义事件驱动的,Nginx基于事件驱动,如epoll

}

httpd{

  //关于httpd相关配置

}

Server{

//server只能放在http中,server不能嵌套,但location可以

//嵌套

}

  

Location URI{

//定义虚拟主机

//可以放在server中,也可以放在httpd中

//访问规则,定义URI的属性(谁能干什么)

}

 

详解:

 

Location  /form/{

      Proxy_passHttp://172.16.100.11:8080/bbs/;

}

http://www.magedu.com/forum/

   àhttp://172.16.100.11:8080/bbs/

 

如果使用了模式匹配只能指定到:

http://172.16.100.11:8080/

 

OP:

~  :不区分大小写

~* :区分大小写

^~ : 做逐字符匹配

= : 路径精确匹配,通常匹配一个文件

 

28分


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值