原文链接:https://blog.csdn.net/tantexian/article/details/50056199 global #全局设置 # to have these messages end up in /var/log/haproxy.log you will # need to: # # 1) configure syslog to accept network log events. This is done # by adding the '-r' option to the SYSLOGD_OPTIONS in # /etc/sysconfig/syslog # # 2) configure local2 events to go to the /var/log/haproxy.log # file. A line like the following can be added to # /etc/sysconfig/syslog # # local2.* /var/log/haproxy.log log 127.0.0.1 local2 #log语法: log [max_level_1] #全局的日志配置,使用log关键字,指定使用 127.0.0.1 上的syslog服务中的local0日志设备,记录日志等级为info的日志 chroot /var/lib/haproxy #改变当前工作目录 pidfile /var/run/haproxy.pid #当前进程的pid文件 maxconn 4000 #最大连接数 user haproxy #所属用户 group haproxy #所属组 daemon #以守护进程方式运行haproxy # turn on stats unix socket stats socket /var/lib/haproxy/stats #--------------------------------------------------------------------- defaults mode http #默认的模式mode{tcp|http|health},tcp是四层,http是七层,health只会返回ok log global #应用全局的日志文件 option httplog #启用日志记录http请求,默认haproxy日志记录是不记录http请求日志 option dontlognull #启用该项,日志中将不会记录空连接;所谓空连接就是在上游的负载均衡或者监控系统为了探测该服务是否存活可用时,需要定期的链接或者获取某一固定的组件或页面,或者探测扫描端口是否存在监听或开放等动作被称为空连接;官方文档中标注,如果该服务器上没有其他的负载均衡器,建议不要使用该参数,因为互联网上的而已扫描或其他动作就不会被记录下来 option http-server-close #每次请求完毕后主动关闭http通道 option forwardfor except 127.0.0.0/8 #如果服务器上的应用程序想记录发起请求的客户端的ip地址,需要在haproxy上配置此选项,这样haproxy会把客户端的ip信息发送给服务器,在http请求中添加"X-Forwarded-For"字段;启用 X-Forwarded-For,在requests头部插入客户端ip发送给后端的server,使后端的server能获取到客户端真实ip option redispatch #当使用了 cookie 时,haproxy会将其请求的后端服务器的derverID插入到cookie中,以保证会话SESSION持久性;而此时,如果后端的服务器宕掉了,但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求强制重定向到另外一个后端的server上,以保证服务的正常 retries 3 #定义后端服务器失败重连次数,链接失败次数超过此数值后将对应的后端服务器标记为不可用 timeout http-request 10s #http请求超时时间 timeout queue 1m #一个请求在队列里的超时时间 timeout connect 10s #链接超时 timeout client 1m #客户端超时 timeout server 1m #服务端超时 timeout http-keep-alive 10s #设置http-keep-alive的超时时间 timeout check 10s #检测超时 maxconn 3000 #每个进程可用的最大连接数 #--------------------------------------------------------------------- frontend main *:5000 #监听地址端口为5000 stats uri /haproxy #haproxy监控页面,curl ip:port/path 访问 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 default_backend app #定义一个名为app的前端部分;此处将对应的请求转发给后端 #--------------------------------------------------------------------- backend static #动静分离(如果url_path匹配 .jpg .gif .png .css .js静态文件则访问此后端) balance roundrobin #负载均衡算法(#banlance roundrobin 轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数) server static 127.0.0.1:4331 check #静态文件部署在本机(也可以部署在其他机器或者squid缓存服务器) #--------------------------------------------------------------------- backend app #定义一个名为my_webserver后端部分。PS:此处backend app只是一个自定义名字而已,但是需要与frontend里面配置项default_backend 值相一致 balance roundrobin #负载均衡算法 server app1 127.0.0.1:5001 check #定义的多个后端 server app2 127.0.0.1:5002 check #定义的多个后端 server app3 127.0.0.1:5003 check #定义的多个后端 server app4 127.0.0.1:5004 check #定义的多个后端