大多数人针对nginx的负载均衡代理都是停留在HTTP代理那一块,我也同样;然而最近遇到了一个小问题,下面简单的叙述一下:java
一、开发那边使用java代码进行ssh链接Linux服务器,而后执行bash命令去完成参数值的获取;前提是要求是实现nginx负载,这。。。。有点意思啊,之前没遇到过这么奇葩的问题,不过兵来将挡水来土掩,咱仍是要解决不是,因此就想到了nginx的负载代理,可是感受HTTP明显不行啊(测试也是不行的,虽然前面加了ssh内部转发),那就只有tcp代理去实现了nginx
二、若是你的nginx版本是1.9之后的版本,那么nginx的tcp代理,是须要一个叫ngx_stream_core_module的模块,源码编译nginx的时候只须要加上--with-stream,这个模块就会自动安装了,so easybash
三、下一步就是配置nginx文件了,咱们知道nginx有http{ server { } }结构,跟http同级加上stream{ upstream{} server{} }这样的结构就能够,下面是我写的测试案例:服务器
stream {负载均衡
upstream backend {ssh
# hash $remote_addr consistent;tcp
server 10.0.10.181:22;测试
server 10.0.10.182:22;代理
}server
server {
listen 80;
# proxy_connect_timeout 1s;
# proxy_timeout 3s;
proxy_pass backend;
}
}
四、这样就可使用 ssh root@10.0.10.133 -p80 "uptime" 相似这样的方式去链接执行了(代码中也是这样的原理);基于这样的案例,咱们也能够实现相似外网链接MySQL的tcp代理,我就不过多阐述了,原理都是同样的。
五、在这里再唠叨一句,就是跟你们道个歉,2017年因为工做的缘由,没能更新Python和Linux的文章,2018年,我会把我遇到的各类问题以及从最基础的Python技术展示给你们,感谢你们的支持