读思码

日常记录


Nginx和HAproxy

<p>[TOC]</p> <h1>1.正向代理和反向代理的区别</h1> <p><strong>正向代理</strong>:</p> <p>正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。</p> <p><strong>反向代理</strong>:</p> <p>反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理 的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容 原本就是它自己的一样。</p> <p><strong>从用途上来讲</strong>:</p> <p>正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。 反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。 另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。</p> <p><strong>从安全性 来讲</strong>:</p> <p>正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。 反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。</p> <h1>2.Ngix和HAproxy的异同</h1> <p><strong>nginx</strong>:</p> <p>使用花括号,层级化的配置文件结构 除了自带的map、if语句可以实现简单逻辑,原生支持js/perl脚本,非官方支持lua 除了做负载均衡还可以做静态web服务器,缓存服务器(Haproxy不行) 模块化,按需编译,因为模块化,所以可选很多第三方扩展模块 开源版本只有基础功能,更多的功能要折腾第三方模块,或者花钱买官方扩展版的nginx plus 是一个Web Server定位,</p> <p><strong>haproxy</strong>:</p> <p>定义和引用,命令式的配置结构 支持acl,但不支持其他脚本语言 做负载均衡性能比nginx好 有一个状态统计页面 官方支持会话保持、健康检查等 基础功能覆盖要比nginx开源版好,但是不易扩展,缺乏第三方资源。 就是用来做负载均衡的。</p> <p>相同点: 都能作为反向代理,都能做负载均衡,可以健康检测。 nginx要基于端口的telnet做心跳检查, 从架构上来说,进程模型不一样,haproxy是单进程方式无法充分利用多核,nginx是多进程模式</p> <h1>3.nginx的五种负载均衡算法</h1> <p>1.轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2.权重轮询(weight):指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 3.IP_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 4.fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配。 5.url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。</p>

页面列表

ITEM_HTML