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
© 著作权归作者所有
下一篇: cloudflare 自选ip
文章评论(0)