安装haproxy

解压haproxy的tar包

着进行haproxy的编译安装,haproxy编译没有configure,直接make->make install

 make TARGET=linux310 CPU=x86_64 PREFIX=/data/haproxy USE_OPENSSL=1 ADDLIB=-lz

 ldd haproxy | grep ssl

make install PREFIX=/data/haproxy

编译参数说明:
TARGET=linux310 : 使用 uname -r 查看内核,如:3.10.0-693.21.1.el7.x86_64,此时该参数就为linux310
CPU=x86_64 : 使用 uname -r 查看系统信息,如 x86_64 x86_64 x86_64 GNU/Linux,此时该参数就为 x86_64
PREFIX : 后面跟的是haprpxy的安装路径
USE_OPENSSL=1 ADDLIB=-lz : 支持ssl 

设置 haproxy

配置 haproxy.cfg 参数

# this config needs haproxy-1.1.28 or haproxy-1.2.1
# haproxy version 1.5.18

#---------------------------------------------------------------------
# Global settings
# 这里的配置是使用HAProxy作为SSL终端,而不是使用SSL穿透让后台服务器处理SSL
# 如果使用HAProxy实现SSL穿透,配置则不一样
#---------------------------------------------------------------------
global
        log 127.0.0.1   local0 warning
        #最大连接数
	maxconn 8192
        #修改haproxy的工作目录至指定的目录
	chroot /data/haproxy/var/chroot
	pidfile /data/haproxy/var/run/haproxy.pid
        user root
        group root
        #让haproxy以守护进程的方式工作于后台
	daemon
	#进程数量(可以设置多个进程提高性能)
        nbproc 1
	#这一行要加,要不然reload会警告
	tune.ssl.default-dh-param 2048
        ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
        ssl-default-bind-options no-sslv3

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
        #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
        mode    http
        #启用每个实例日志记录事件和流量
	log     global
        #记录HTTP 请求,session 状态和计时器
	option  httplog
	#启用或禁用在连接故障情况下的会话重新分配
	option  redispatch
        #启用和禁用 记录 空连接
	option  dontlognull
	#获得客户端IP
	option  forwardfor
        #每次请求完毕后主动关闭http通道,HA-Proxy不支持keep-alive模式
	option  httpclose
        #当对server的connection失败后,重试的次数
        retries 3

        #haproxy的状态管理页面,通过/haproxyadmin?stats来访问
	stats enable
	stats hide-version
        stats uri /haproxyadmin?stats
        stats auth admin:xxxx
	#负载均衡方式根据权重
        balance static-rr
        maxconn 4000
        timeout connect      5000
        timeout client      50000
        timeout server      50000

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend xxx
        #保留80,同时支持443 ssl,后面指定证书文件
        bind *:80
	bind *:443 ssl crt /data/haproxy/conf/cert/xxxxx.pem

	#仅支持ssl,如果连接不是通过SSL连接的,它将http重定向到https
	redirect scheme https if !{ ssl_fc }
	#这句话必须要有,否则静态页面的哪些样式会加载不上
    reqadd X-Forwarded-Proto:\ https

        #请求报文中的所有host中符合后面指定的域名 -i表示不区分大小写
	acl fs_com hdr(host) -i www.xxxxx.com
        
	use_backend fs if fs_com
        default_backend fs


backend fs
        #使用defaults中配置的参数
	#balance static-rr
        #option httpclose
	#option redispatch
	#传递客户端真实IP
	#option forwardfor
	#option forwardfor header X-Forwarded-For

	option httpchk HEAD /favicon.ico HTTP/1.0
	#允许serverid插入cookie中,serverid后面可以定义
	cookie SERVERID insert indirect nocache
        
	#需要转发的ip及端口
	#maxconn 2048服务器接受的最大并发连接数
	#inter 2000 健康检查时间间隔2秒
        #rise 3 检测多少次才认为是正常的
        #fall 3 失败多少次才认为是不可用的
        #weight 30 权重
        server www01 127.0.0.1:8000 cookie www01 maxconn 2048 weight 3 check port 8000 inter 2000 rise 3 fall 3
        server www02 127.0.0.1:8080 cookie www02 maxconn 2048 weight 6 check port 8000 inter 2000 rise 3 fall 3

启动haproxy

#对haproxy 语法做检查
/data/haproxy/sbin/haproxy -c  -f /data/haproxy/conf/haproxy.cfg
#启动haproxy
/data/haproxy/sbin/haproxy -D -f /data/haproxy/conf/haproxy.cfg
#重新加载配置文件reload
/data/haproxy/sbin/haproxy -f /data/haproxy/conf/haproxy.cfg -sf `cat /data/haproxy/var/run/haproxy.pid`

启动haproxy日志

查看统计页面的情况 

配置ssl中需要注意:

证书的处理,需要将网站的根证书和key简单的合并在一起:

cat xxx.com.pem xxx.com.key | tee xxx.pem

否则会报 'bind *:443' : unable to load SSL private key from PEM file '/data/haproxy/conf/cert/xxx.com.pem'.

我将文件证书合到一起之后仍然报上面那个问题,最后打开证书,发现格式有点问题,如下图

将格式调整下即可

#在request加上https

reqadd X-Forwarded-Proto:\ https

这个配置必须要在haproxy.cfg配置文件中加上,否则会出现如下图样式加载的问题

如果样式还是有问题,则需要进行如下的配置

同nginx一样,如果haproxy和tomcat之间配置双方的 X-Forwarded-Proto 就是为了正确地识别实际用户发出的协议是 http 还是 https。

配置Tomcat server.xml 的 Host下配置一个 Valve

<Valve className="org.apache.catalina.valves.RemoteIpValve"
			 remoteIpHeader="X-Forwarded-For"
			 protocolHeader="X-Forwarded-Proto"/>

猜你喜欢

转载自blog.csdn.net/ystyaoshengting/article/details/82899418
今日推荐