让一个端口同时做两件事:http/https和ssh

标签: 端口 https http 所谓技术 80 | 发表时间:2011-08-16 23:47 | 作者:creke 蓝精灵
出处:http://blog.creke.net

相信很多人都在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。配置如下:

#By http://blog.creke.net/

global
    maxconn 5120 
    chroot /usr/local/blog.creke.net/haproxy  
    daemon
    quiet
    nbproc 2
    pidfile /usr/local/blog.creke.net/haproxy/haproxy.pid

defaults
    timeout connect 5s
    timeout client 50s
    timeout server 20s

listen 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_http

backend 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.pid

defaults
    timeout connect 5s
    timeout client 50s
    timeout server 20s

listen 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_ssl

backend 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] 推荐:

让一个端口同时做两件事:http/https和ssh

- 蓝精灵 - Creke Blog
相信很多人都在YY:能不能让80端口分析连接协议,如果是http协议就让服务器交给http服务程序(如Apache、Nginx等)处理,如果是ssh协议就交给ssh服务程序(如OpenSSH Server)处理呢. 首先,配置http服务程序监听8080端口或者让https服务监听8443端口,配置ssh服务程序监听22端口.

nginx强制使用https访问的多种方法(http跳转到https)

- - C1G军火库
nginx强制使用https访问的多种方法(http跳转到https). 先说明一下HTTP跳转的状态码. 301 Moved Permanently:该方式将所有的 HTTP 请求重定向到 HTTPS 上,并且该重定向是永久性的. 客户端在收到 301 响应后,会自动将 HTTP 请求转为 GET 请求,同时将请求地址修改为重定向后的地址.

Charles抓取微信小程序数据包(HTTP/HTTPS) - 简书

- -
项目前台为小程序,为快速定位错误,使用Charles进行抓包分析. 硬件环境:MAC + IPhone6P. Charles(MAC)破解版下载. 打开Charles -> Proxy -> Proxy Settings. 设置端口号为:8888,并勾选'Enable transparent Http proxying'项.

Chrome浏览器强制http重定向到https的简单方法

- Coolxll - Chrome迷
有的朋友修改host进某些网站,但每次进入都是诸如 http://twitter.com ,大多时候有可能进不去. 前段时间就算修改了,输入http://plus.google.com ,G+也是也进不去的,需要手动修改http为https,方能进入. 今天,在Google+看到一篇介绍Chrome浏览器强制http重定向到https的简单方法,搬到这里来,纯粹的Chrome技巧.

深入浅出:HTTPS 要比 HTTP 多用多少服务器资源?

- - 膘叔
话外页,这是一篇好文章,深入浅出的写出了很多东西,所以,值得一看,有时候,写文章就是这样,你写的越学术,别人越不鸟你,毕竟不是每个人的知识点都象你那么丰富. 所以一篇好的文章,能够很直白的表达出来才是最OK的. 说起来,当年白居易就是写诗给90岁的老太太听,她能听得懂,这就是好诗(这是老师当年说的,我没有认证过.

四谈iOS抓包:Mac下好用的HTTP/HTTPS抓包工具Charles

- - 99css
在Mac下做开发,用Fiddler抓包由于离不开Windows比较痛苦,还好有Charles,到官网 http://www.charlesproxy.com/可下载到最新版本(若不支持rMBP可拖到 Retinizer中把文字变清晰). 查看Mac电脑的IP地址,如192.168.1.7. 打开iOS设置,进入当前wifi连接,设置HTTP代理Group,将服务器填为上一步中获得的IP,即192.168.1.7,端口填8888.

https协议

- - 互联网 - ITeye博客
SSL 协议的握手过程   .       为了便于更好的认识和理解 SSL 协议,这里着重介绍 SSL 协议的握手协议. SSL 协议既用到了公钥加密技术(非对称加密)又用到了对称加密技术,SSL对传输内容的加密是采用的对称加密,然后对对称加密的密钥使用公钥进行非对称加密. 这样做的好处是,对称加密技术比公钥加密技术的速度快,可用来加密较大的传输内容,公钥加密技术相对较慢,提供了更好的身份认证技术,可用来加密对称加密过程使用的密钥.