haproxy正反向代理

上篇中讲述了如何安装haproxy,接下来简单的讲讲它的用法

基本所有的代理配置都是写在haproxy.cfg文件,在global,default后直接添加相关配置即可

  • 举个例子:
    如果装了haproxy的外网主机ip是120.66.66.666(外),10.66.66.666(内)
    而你的mysql服务放在了内网的10.88.88.888的3306端口
listen mysql
    bind *:8001   #haproxy代理端口
    mode tcp
    server mysql-1 10.88.88.888:3306 check

上面的4行配置就会完成了代理,你访问120.66.66.666的8001端口就会自动转发到10.88.88.888的3306

下面来讲讲我入了两次坑的支付相关的HTTPS反向代理,一般来说我们的服务都是放在内网,难免是需要发起https请求和一些服务来交互,而三大支付机构相关的请求有些特殊性

  • 访问的域名不能变化,必须是原来的,如api.mch.weixin.qq.com
    mapi.alipay.com,gateway.95516.com,否则就不无法通过证书校验,毕竟涉及到钱的都会比较严格.
  • 银联和微信的请求端口的入口必须是https默认的443端口
  • 这里提供一种解决方案(如果有更好的欢迎在下方评论):同时在内外网装两台haproxy
#内网hosts文件配置
127.0.0.1 gateway.95516.com
127.0.0.1 mapi.alipay.com
120.66.66.666 api.mch.weixin.qq.com
#内网cfg文件
 listen alipay
    bind *:7832
    mode tcp
    server alipay 120.66.66.666:7832 check
listen unipay 
    bind *:443
    mode tcp
    server unipay 10.66.66.666:7842 check    #此处为外网主机的内网ip
#外网cfg文件
listen alipay
    bind *:7832
    mode tcp
    server alipay mapi.alipay.com:443 check
listen unipay
    bind *:7842
    mode tcp
    server unipay gateway.95516.com:443 check
listen wechat
    mode tcp
    bind *:443
    balance roundrobin
    server wechat api.mch.weixin.qq.com:443 check 
  • 在内网curl测试
    curl https://mapi.alipay.com:7832/gateway.do
    curl https://gateway.95516.com/gateway/api/frontTransReq.do
    curl https://api.mch.weixin.qq.com/pay/unifiedorder
    以上链接如果curl返回的是html页面则表示pass,以下为微信返回的报错页面.
haproxy正反向代理_第1张图片
Paste_Image.png
  • 访问流程,以银联为例
    curl https://gateway.95516.com/gateway/api/frontTransReq.do,
    由于内网配了hosts的缘故,gateway.95516.com会识别到本机,本机的443在由haproxy转发到外网的7842端口,外网的7842会被外网的haproxy转发到银联生产的443.

你可能感兴趣的:(haproxy正反向代理)