Linux haproxy代理介绍

栏目: 服务器 · 发布时间: 5年前

内容简介:HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。1、安装2、调整参数

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

1、安装

[root@node1 varnish]# yum install haproxy

2、调整参数

nbproc <number>:要启动的haproxy的进程数量; 官方建议一个 默认一个 maxconn 每个进程最大连接数 一个连接33kb 1g内存 能创建20000-25000个进程,这个还是要看具体调整  maxconnrate 最大创建连接速率 maxse***ate 最大创建会话数量 maxsslconn 最大创建ssl连接 默认还是maxconn,防止内存溢出等
ulimit-n <number>:每个haproxy进程可打开的最大文件数; 客户端 服务端,所以是最大连接数量*2, 会自动调整
timeout client <timeout> 客户端非活动超时时长 timeout server <timeout> 服务器端非活动时长 timeout http-keep-alive 持久连接的持久时长; timeout http-request 等待http请求报文超时时长 timeout connect 跟服务器连接 超时时长 timeout client-fin 客户端断开连接 默认30s timeout server-fin 服务器断开连接

调整maxconn即可,其他看情况调整

3、配置前端后台

#调度方法

#roundrobin 动态算法:支持权重的运行时调整,支持慢启动;每个后端中最多支持4095个server;

#static-rr:静态算法:不支持权重的运行时调整及慢启动;后端主机数量无上限;

#leastconn:推荐使用在具有较长会话的场景中,例如 MySQL 、LDAP等;

#first:根据服务器在列表中的位置,自上而下进行调度;前面服务器的连接数达到上限,新请求才会分配给下一台服务;

#source:源地址hash;

#<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

#左半部分:/<path>;<params>

#整个uri:/<path>;<params>?<query>#<frag>

#uri:对URI的左半部分做hash计算,并由服务器总权重相除以后派发至某挑出的服务器;

#url_param 对用户请求的uri听<params>部分中的参数的值作hash计算,并由服务器总权重相除以后派发至某挑出的服务器;通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个Backend Server;

#hdr(<name>):对于每个http请求,此处由<name>指定的http首部将会被取出做hash计算; 并由服务器总权重相除以后派发至某挑出的服务器;没有有效值的会被轮询调度; hdr(Cookie)

#调度算法

#hash-type

#map-based:除权取余法,哈希数据结构是静态的数组;

#consistent:一致性哈希,哈希数据结构是一个树;

#mode { tcp|http|health }

#tcp:基于layer4实现代理;可代理mysql, pgsql, ssh, ssl等协议;

#http:仅当代理的协议为http时使用;

#health:工作为健康状态检查的响应模式,当连接请求到达时回应“OK”后即断开连接;

#server 参数

#server <name> <address>[:port] [settings ...]

#<name>:服务器在haproxy上的内部名称;出现在日志及警告信息;

#<address>:服务器地址,支持使用主机名;

#[:[port]]:端口映射;省略时,表示同bind中绑定的端口;

#[param*]:参数

#maxconn <maxconn>:当前server的最大并发连接数;

#backup:设定当前server为备用服务器;

#check:对当前server做健康状态检测;

#addr :检测时使用的IP地址;

#port :针对此端口进行检测;

#inter <delay>:连续两次检测之间的时间间隔,默认为2000ms;

#rise <count>:连续多少次检测结果为“成功”才标记服务器为可用;默认为2;

#all <count>:连续多少次检测结果为“失败”才标记服务器为不可用;默认为3;

#注意:httpchk,"smtpchk", "mysql-check", "pgsql-check" and "ssl-hello-chk" 用于定义应用层检测方法;

#cookie <value>:为当前server指定其cookie值,用于实现基于cookie的会话黏性; 一次固定值,第二次找这个固定值对应的主机

#disabled:标记为不可用;

#redir <prefix>:将发往此server的所有GET和HEAD类的请求重定向至指定的URL; https://www.baidu.com

#weight <weight>:权重,默认为1;

frontend  main *:80
    mode tcp
    default_backend             app

backend app
    balance     source
    hash-type   map-based
    server      node2 192.168.1.201:80 check inter 1000 rise 1 fall 2 weight maxconn 2000  
    server      node3 192.168.1.202:80 check

4、配置状态页面和认证(base64)

可以写在backend  和 frontend中
listen stats:10080  # 也可以配置backend 或者 frontend 或者 listen 
    stats enable
    stats uri /haadmin?admin
    stats realm "HAProxy Statistics"
    stats auth admin:admin
    stats auth admin1:admin1
    stats admin if TRUE  #状态页面设置  慎用

Linux haproxy代理介绍

5、tcp代理

listen sshsrvs :10022
    mode tcp
    maxconn  10
    balance leastconn
    server ssh1 192.168.1.201:22 check
    server ssh2 192.168.1.202:22 check

6、基于cookie绑定

backend websrvs
    cookie WEBSRV insert nocache indirect
    server srv1 172.16.100.6:80 weight 2 check rise 1 fall 2 maxconn 3000 cookie srv1
    server srv2 172.16.100.7:80 weight 1 check rise 1 fall 2 maxconn 3000 cookie srv2

Linux haproxy代理介绍 #第一次来添加cookie值,第二次根据cookie值到指定的后端主机

7、代理ip 默认就有

默认开启的
option forwardfor [ except <network> ] [ header <name> ] [ if-none ]
option forwardfor header X-Client  重命名

8、自定义错误页面

<code>:is the HTTP status code. Currently, HAProxy is capable of  generating codes 200, 400, 403, 408, 500, 502, 503, and 504.

errorfile 400 /etc/haproxy/errorfiles/400badreq.http
errorfile 408 /dev/null  # workaround Chrome pre-connect bug
errorfile 403 /etc/haproxy/errorfiles/403forbid.http
errorfile 503 /etc/haproxy/errorfiles/503sorry.http 

errorloc <code> <url>
errorloc 403 http://www.baidu.com
errorloc302 <code> <url>

#_____________________________________________________________
    acl invalid_src src 192.168.1.104
    block if invalid_src
    errorfile 403 /root/error.html

9、header

reqadd  <string> [{if | unless} <cond>] 
rspadd <string> [{if | unless} <cond>]

reqdel  <search> [{if | unless} <cond>]
reqidel <search> [{if | unless} <cond>]  (ignore case)

rspdel  <search> [{if | unless} <cond>]
rspidel <search> [{if | unless} <cond>]  (ignore case)

#_________________________________________________________________________
frontend  main *:80
    rspadd X-var:\ Haproxy
    rspdel X-Powered-By
    default_backend             app

Linux haproxy代理介绍

10、日志

log:定义全局的syslog服务器;最多可以定义两个;
log         127.0.0.1 local2
log-format <string>:
默认发往本机的日志服务器;
    (1) local2.*      /var/log/local2.log 
    (2) $ModLoad imudp
        $UDPServerRun 514

[root@node1 varnish]# tail /var/log/haproxy.log
Jun  7 14:56:57 localhost haproxy[8676]: 192.168.1.104:64969 [07/Jun/2018:14:56:57.477] main app/node2 0/0/0/2/2 200 1734 - - --VN 2/2/0/0/0 0/0 "GET /index.php HTTP/1.1"

>>> Feb  6 12:14:14 localhost \
      haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \
      static/srv1 10/0/30/69/109 200 2750 - - ---- 1/1/1/1/0 0/0 {1wt.eu} \
      {} "GET /index.html HTTP/1.1"
  Field   Format                                Extract from the example above
      1   process_name '[' pid ']:'                            haproxy[14389]:
      2   client_ip ':' client_port                             10.0.1.2:33317
      3   '[' accept_date ']'                       [06/Feb/2009:12:14:14.655]
      4   frontend_name                                                http-in
      5   backend_name '/' server_name                             static/srv1
      6   Tq '/' Tw '/' Tc '/' Tr '/' Tt*                       10/0/30/69/109
      7   status_code                                                      200
      8   bytes_read*                                                     2750
      9   captured_request_cookie                                            -
     10   captured_response_cookie                                           -
     11   termination_state                                               ----
     12   actconn '/' feconn '/' beconn '/' srv_conn '/' retries*    1/1/1/1/0
     13   srv_queue '/' backend_queue                                      0/0
     14   '{' captured_request_headers* '}'                   {haproxy.1wt.eu}
     15   '{' captured_response_headers* '}'                                {}
     16   '"' http_request '"'                      "GET /index.html HTTP/1.1"

      Tq 等待客户端发送报文时间
      tw 队列等待时长
      tc 创建连接时长
      Tr 等待服务器发送响应到代理时间
      tt 接收报文时长

      actconn 日志记录时候当前进程连接数
      feconn  日志记录时候前端连接数
      beconn  日志记录时候后端连接数
      srv_conn 日志记录时候当前活动连接数
      retries 日志记录时候重新连接的个数

    #捕获并记录日志  
    capture request header Host len 64
    capture request header User-Agent len 128
    capture request header X-Forwarded-For len 100
    capture request header Referer len 200
    capture response header Server len 40
    capture response header Server-ID len 40

log-format %T\ %t\ Some\ Text
log-format %{+Q}o\ %t\ %s\ %{-Q}r

11、压缩

compression algo <algorithm> ...:启用http协议的压缩机制,指明压缩算法gzip, deflate;
compression type <mime type> ...:指明压缩的MIMI类型

#___________________________________________________________
compression type application/javascript text/plain
compression algo gzip

Linux haproxy代理介绍

12、动静分离

frontend  main *:80
    acl invalid_src src 192.168.1.104
    block if invalid_src
    #如果源地址是192.168.1.104  invalid_src=True ;如果invalid_src是真就block

frontend  main *:5000
#动静分离
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js

    use_backend static          if url_static

    #else
    default_backend             app

13、虚拟主机动静分离配置

frontend  main *:80
    acl www_proxy hdr_dom(host) -i www.proxy.develop
    acl url_static       path_end       -i .jpg .gif .png .css .js

    use_backend www_proxy_static    if  url_static
    use_backend www_proxy_dynamic   if www_proxy  ! url_static

backend www_proxy_static
    server      node1 192.168.1.201:80 check
backend www_proxy_dynamic
    server      node2 192.168.1.202:80 check

14、https(http->https)

frontend https_frontend
        bind *:443 ssl crt /etc/haproxy/demo.pem
        default_backend             app

frontend  main *:80
    acl ssl_proxy hdr_dom(host) -i www.proxy2.develop
    redirect scheme https if ssl_proxy

Linux haproxy代理介绍


以上所述就是小编给大家介绍的《Linux haproxy代理介绍》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

共鸣:内容运营方法论

共鸣:内容运营方法论

舒扬 / 机械工业出版社 / 2017-5-8 / 59.00

近5年来网络信息量增长了近10倍,信息极度过剩。移动互联网以碎片化、强黏度以及惊人的覆盖率给传统的商业环境带来了巨大的影响,向陈旧的广告、公关、媒体行业展开了深度的冲击。 传统的以渠道为中心的传播思想几近失效,优秀内容成为了各行业最稀缺的资产,这是时代赋予内容生产者的巨大机会。本书作者在多年经验和大量案例研究的基础上,总结出了移动互联网时代的内容运营方法论——共鸣,它将告诉我们如何收获核心粉......一起来看看 《共鸣:内容运营方法论》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

html转js在线工具
html转js在线工具

html转js在线工具