Linux haproxy代理介绍

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

内容简介: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代理介绍》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Impractical Python Projects

Impractical Python Projects

Lee Vaughan / No Starch Press / 2018-11 / USD 29.95

Impractical Python Projects picks up where the complete beginner books leave off, expanding on existing concepts and introducing new tools that you’ll use every day. And to keep things interesting, ea......一起来看看 《Impractical Python Projects》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码