haproxy 负载 源ip 真实ip

2019年12月23日 0 条评论 1.78k 次阅读 0 人点赞

haproxy负载相对来说,个人感觉比nginx或者好用,面板显示状态,能监控面板之类的可以设置报警或者其他自动维护措施。

在tcp转发的时候,转发客户端ip基本上比较麻烦,在 https://blog.csdn.net/frockee/article/details/78641188 中有详细步骤。

现不考虑tcp,因为只做http转发,这个相对比较省事点。

对于http80的转发,添加

option forwardfor
option originalto

即可

对于https443比较麻烦,要么使用上述tcp中的方法,要么在haproxy端设置ssl证书,采用acme.sh申请泛域名证书的方式会比较简单, lnmp.org 的一键包中有比较便捷的方式,具体参考 https://github.com/Neilpang/acme.sh/wiki/dnsapi 中的使用方法。申请下来后,haproxy使用的是 pem 的格式,参考如下,将这2个文件合成为一个即可。

证书内容( PEM格式 ): domain.cer
证书私钥( PEM格式 ): domain.key

然后在haproxy配置文件中加入转发https带源ip

bind *:443 ssl crt /etc/haproxy/test.com.pem
option forwardfor
option originalto
reqadd X-Forwarded-Proto:\ https

启用后会提示证书类型相关的问题,在 global 加入如下选项:

tune.ssl.default-dh-param 2048

在 frontend 中可以加入泛域名的代理

frontend http-in
    mode http
    bind *:80
    option forwardfor
    option originalto
    acl testacl hdr_dom(host) -i test.com
    use_backend httpbackend if testacl

frontend https-in
    mode http
    bind *:443 ssl crt /etc/haproxy/test.com.pem
    option forwardfor
    option originalto
    reqadd X-Forwarded-Proto:\ https # 新版中这个参数不可用,启动时有提示
    acl testacl hdr_dom(host) -i test.com
    use_backend httpbackend if testacl
    
backend httpbackend
    mode http
    balance source
    server testend1 aaa.com:80 maxconn 20480 weight 50 rise 2 fall 3 check inter 2000
    server testend1 bbb.com:80 maxconn 20480 weight 50 rise 2 fall 3 check inter 2000

相当于半程ssl,在客户端和haproxy直接使用https,而haproxy和服务器直接使用了http。


补充一个pem的巨坑:

经过上面将cer和key合称为 pem 之后,浏览器访问没有任何问题,命令行和部分请求的时候ssl会报错:

SSL certificate problem: unable to get local issuer certificate

合成的时候需要将 fullchain.cer 和 key 一起合成,命令行请求正常。

搜索后资料来自于: https://www.iconben.com/1243.html

Sevenfal

这个人太懒什么东西都没留下

文章评论(0)