让一个端口同时做两件事: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()函数的特例. 我们也能够用重定向来改变默 ...
随机推荐
- DotNetBar 第2课,窗口设置 Ribbon Form 样式
1. 新增 windows 窗体时,选 Ribbon Form 2. 窗体继承 Office2007RibbonForm 3. 设计窗口下面,删除 删除styleManager1 组件 窗口效果如下 ...
- sublime上安装c/c++代码分析工具 sublime Linter - cppcheck
项目官方说明 sublime Linter - cppcheck 理解下sublime Linter - cppcheck, 它是插件的插件,sublime的插件sublimeLinter的插件.网络 ...
- [ADB]ADB(Android Debug Bridge)简介及基础(不包含命令)
"Android Debug Bridge (adb) is a versatile command line tool that lets you communicate with an ...
- 字符串与json对象之间转换
var data='{"1":"","2":"two"}' 原生 eval eval('('++')') JSON.p ...
- PHPMyAdmin弱口令猜解【Python脚本】
PHPMyAdmin弱口令猜解 测试截图: 代码片段 #! /usr/bin/env python # _*_ coding:utf-8 _*_ import requests import time ...
- iOS 传值 委托(delegate)和block 对比
技术交流新QQ群:414971585 这篇文章建议和前一篇一起看, 另外先弄清楚IOS的block是神马东东. 委托和block是IOS上实现回调的两种机制.Block基本可以代替委托的功能,而且实 ...
- C#-2 wpf 项目编程结构设计
View:界面布局 EXCEL ViewModel:流程,数据粘合胶水 Model: 1)DB 结构 (数据库结构) 2)绑定的数据(界面交互数据) Service:1)BLL(画流程图)画业务逻辑图 ...
- C# 创建开机启动核心代码
#region 访问 AppSettings private void SaveAppSetting(string key, string value) { var config = Configur ...
- SQL Server 连接字符串备忘
今天把服务器上的远程访问关了,把连接字符串中的IP地址改成了.,然后就一直连不上.弄了半天,原来是本地连接时非默认实例,不能带端口号. 1.原来的连接服务器地址是:192.168.0.1SQL2005 ...
- Java中事务的概念
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言: 在学习事务确实有不少弯路,那么今天笔者就用例子讲解一下事务,让初学者少走一些弯路. [回顾事务]问:什么是事务? 答:用专业术语来说事 ...