让一个端口同时做两件事:http/https和ssh
相信很多人都在YY:能不能让80端口分析连接协议,如果是http协议就让服务器交给http服务程序(如Apache、Nginx等)处理,如果是ssh协议就交给ssh服务程序(如OpenSSH Server)处理呢?
答案显然是有的。
首先,配置http服务程序监听8080端口或者让https服务监听8443端口,配置ssh服务程序监听22端口。具体不再赘述,如果这都不懂就不用往下看了,因为肯定会搞不定的。
然后,安装一个叫haproxy的强大工具。步骤如下。
下载源代码:
wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.16.tar.gz
查看当前内核版本:
uname -r
然后进入目录编译安装:
cd haproxy-1.4.16
make TARGET=linux26 PREFIX=/usr/local/blog.creke.net/haproxy
make install PREFIX=/usr/local/blog.creke.net/haproxy
其中,第二行的“TARGET”参数要和内核版本一致。第二、三行的“PREFIX”是安装位置。
最后,配置haproxy。
如果要监听80端口,检测到http协议就转发给8080端口使用HTTP,否则转发给22端口使用ssh。配置如下:
global
maxconn 5120
chroot /usr/local/blog.creke.net/haproxy
daemon
quiet
nbproc 2
pidfile /usr/local/blog.creke.net/haproxy/haproxy.piddefaults
timeout connect 5s
timeout client 50s
timeout server 20slisten http
bind :80
timeout client 1h
tcp-request inspect-delay 2s
acl is_http req_proto_http
tcp-request content accept if is_http
server server-http :8080
use_backend ssh if !is_httpbackend ssh
mode tcp
timeout server 1h
server server-ssh :22
如果还有监听443端口,检测到https协议就转发到8443端口使用HTTPS,否则转发给22端口使用ssh。则配置如下:
global
maxconn 5120
chroot /usr/local/blog.creke.net/haproxy
daemon
quiet
nbproc 2
pidfile /usr/local/blog.creke.net/haproxy/haproxy.piddefaults
timeout connect 5s
timeout client 50s
timeout server 20slisten https
bind :443
timeout client 1h
tcp-request inspect-delay 2s
acl is_ssl req_ssl_ver 2:3.1
tcp-request content accept if is_ssl
server server-https :8443
use_backend ssh if !is_sslbackend ssh
mode tcp
timeout server 1h
server server-ssh :22
把内容保存为“/usr/local/blog.creke.net/haproxy/etc/haproxy.conf”,执行命令:
/usr/local/blog.creke.net/haproxy/sbin/haproxy -f /usr/local/blog.creke.net/haproxy/etc/haproxy.conf
即可运行。
好了,大家应该可以举一反三,起码也可以依葫芦画瓢吧。
参考文章:
https://dgl.cx/2010/01/haproxy-ssh-and-ssl-on-same-port
http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
这样设置发现一个问题, http/https server 不能获取到客户端的 IP。
http://blog.creke.net/758.html/comment-page-1
让一个端口同时做两件事:http/https和ssh的更多相关文章
- 编写高质量代码改善C#程序的157个建议——建议144:一个方法只做一件事
建议144:一个方法只做一件事 “单一职责原则”(SRP)要求每一个类型只负责一件事情.我们将此概念扩展到方法上,就变成了:一个方法只做一件事. 回顾上一建议的代码,LocalInit和RemoteI ...
- 阿里云ECS每天一件事D1:配置SSH
近期因为项目需求,采购了两台阿里云ECS,选择的系统为CentOS 6.3 X64 安全加固版,额外买了160G的硬盘,应该够应付此项目的需求了. ECS默认已经配置好了sshd服务,可以使用root ...
- Functions should do one thing一个函数应该只做一件事
if you take nothing else away from this guide other than this, you'll be ahead of many developers. 如 ...
- Qt Model/View理解(二)---构造model(细心研读,发现超简单,Model就是做三件事:返回行数量、列数量、data如何显示。然后把model与view联系起来即可,两个例子都是如此)good
数据是一个集合,显示也是一个集合.例如一篇<西游记>的文章,所有的文字就是数据集合,展示方式就是显示的集合,可以以书本的形式,也可以以电纸书的形式,更可以用视频的方式展现. 下面是将一个二 ...
- 安装mysql后必做的两件事
1..删除掉不需要的用户 查看用户表mysql> SELECT User,Host FROM mysql.user; +------+-------------------------+ | U ...
- 安装linux mint后要做20件事
Linux Mint 17 Qiana Cinnamon Linux Mint 17已经发布,定名为Qiana.Mint是Linux最佳发行版之一,它定位于桌面用户,关注可用性和简洁.它携带了风格迥异 ...
- iOS 特定时间内才做某件事,有类似奇葩需求可以参考
我们项目启动的时候要弹出一个广告窗口,很简单的一个功能,服务器的判断一下满足条件,即返回数据,客户端判断数据部位NULL,则弹出弹窗但是老板说,这个要时间短弹出,每天的中午12点到下午2点不能弹出来这 ...
- 与R纠缠的两件事——rownames和子集--转载
与R语言纠缠了一个星期,从快速上手的暗暗得意,到之后某些细节的纠结烦躁,过山车式体验中,我逐渐才认识了真实的R语言. 期间遇到两个很烦恼的问题,一个是让人烦躁抓狂,另一个是无意发现的重大错误. 1. ...
- head first c 笔记<3> 之做一件事并把它做好
1.标准输入.输出与重定向 scanf()和printf()分别为标准输入输出.默认的会从键盘得到数据,在显示器输出数据,是fscanf()和fprintf()函数的特例. 我们也能够用重定向来改变默 ...
随机推荐
- anjularjs简介
1 什么时候该用AngularJS AngularJs(后面就简称ng了)是一个用于设计动态web应用的结构框架.首先,它是一个框架,不是类库,是像EXT一样提供一整套方案用于设计web应用.它不仅仅 ...
- HSV与RGB颜色空间的转换
一.本质上,H的取值范围:0~360 S的取值范围:0~1 V的取值范围:0~255 但是,当图像为32F型的时候,各 ...
- 【转载】App.config/Web.config 中特殊字符的处理
写一个网站,遇到一个问题,发布以后,提示错误,但是即使打开错误提示(在web.config中打开),还是只提示错误,没提示什么地方错误,这让我知道了:是webconfig本身的错误,经过排除,是链接字 ...
- HttpClientUtil简介
使用HttpClient发送请求.接收响应. http协议可以说是现在Internet上面最重要,使用最多的协议之一了,越来越多的java应用需要使用http协议来访问网络资源,HttpClient ...
- CE取系统时间值
取时间值: void GetTime() { //取时间值 SYSTEMTIME st = {}; // 时间结构体 GetLocalTime(&st); // 把获取的系统时间信息存储到SY ...
- Angular2学习之开发环境构建
一.主要资料 http://blog.csdn.net/cz_jjq/article/details/50425206 http://www.tuicool.com/articles/mi6rmuB ...
- range()函数的使用
坚持每天学一点,每天进步一点,迟早有一点我会成为大神. 在python中range函数可以返回一系列连续增加的整数,也是一个迭代器. 函数用法:range(开始, 结束, 步进值): #步进值默认为1 ...
- Ajax - ASP.NET MVC 4 系列
ASP.NET MVC 框架中包含一组 Ajax 辅助方法,可以用来创建表单和指向控制器操作的链接,它们是异步的,且不用编写任何脚本代码来实现程序的异步性,但需要引入脚本文件 jquer ...
- 深入理解CSS中的层叠上下文和层叠顺序(转)
by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wordpress/?p=5115 零.世间的道 ...
- SSH 端口转发+内网穿透
用最直白的语言对本文所有内容进行定义: 端口转发(-L):用A机器(内网)登录B机器(公网), 在A机器打开端口,将收到的所有请求转发到B机器的某个端口 (在代理机上执行) 内网穿透(-R):用A机器 ...