上篇中讲述了如何安装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,以下为微信返回的报错页面.
- 访问流程,以银联为例
curl https://gateway.95516.com/gateway/api/frontTransReq.do,
由于内网配了hosts的缘故,gateway.95516.com会识别到本机,本机的443在由haproxy转发到外网的7842端口,外网的7842会被外网的haproxy转发到银联生产的443.