HAProxy一箭双雕——让一个端口完成两件事

背景

这里为啥会想到让一个端口做两件事呢,主要是因为小编的网络环境处于校园网里面,而校园网的防火墙对外只开放TCP的80端口,也就是说,如果从外部网络访问校园网内部的机器那只能通过80端口来访问。而学过套接字编程的童鞋都明白,一个端口号和固定的IP地址共同标识了物理机器上的一个进程,对于只有单个网卡的机器来说,通过一个端口号只能访问到本物理机器上的一个进程。但是在实际应用的需求中,显然是希望该物理机器能够提供多种服务,而每一种服务都是需要对外提供一个可访问的端口,显然这点在校园网的防火墙下是不可行的。那么是否存在一种方法是的通过一个端口来完成多种服务呢?是的,有这样的方法,这就是代理的使用。


工具

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。通过HAProxy对指定端口进行监听,分析连接协议,如果是http协议就让服务器交给http服务程序(如Apache、Nginx等)处理,如果是ssh协议就交给ssh服务程序,这样就完成了一个端口完成两件事情的需求,当然,这里完成的事情可以根据实际需求来变更,小编这里主要是完成让服务器对外提供两种服务,一个是Squid代理服务,一个是SSH登陆服务。


HAProxy安装和配置

对于Squid和SSH的安装配置,网上的教程很多,小编在这里不再复述。

而小编的安装配置环境是Ubuntu,安装的过程很简单,通过sudo apt-get install haproxy就可以完成安装过程,而剩下的就是配置问题,在配置过程中,小编走了不少弯路。

首先提供一个HAProxy的配置文件说明,传送门:http://leejia.blog.51cto.com/4356849/1421882

初次完成安装的时候,可能很多童鞋会发现,在HAProxy启动的时候就碰到一个麻烦,就是通过指令执行sudo service haproxy start之后,终点没有任何反应,而通过进程查找也没有找到对应的后台进程,是的,没有后台进程说明没有启动,而之所以没有启动是因为系统的默认是不支持启动,需要做的工作很简单,执行需要进入/etc/default/haproxy文件中,然后修改ENABLED=1,然后再次执行启动指令,就可以发现HAProxy进行顺利启动。

保证了HAProxy之后,剩下的就是配置的问题了,这里小编直接提供小编的配置文件:


需要注意的地方在图中均已经标识出来,HAProxy正是通过规则的匹配来完成这所谓的一箭双雕的过程。而测试也表明该配置确实可行,至此也就克服了端口受限的问题了。

### HAProxy 配置监听两个端口的方法 HAProxy 可以通过 `listen` 或 `frontend` 配置块来实现监听多个端口的功能。以下是一个完整的配置示例,展示如何让 HAProxy 同时监听两个不同的端口,并将流量转发到相应的后端服务器。 #### 配置示例 ```plaintext global maxconn 5120 # 设定每个haproxy进程所接受的最大并发连接数[^4] daemon # 让haproxy以守护进程的方式工作于后台[^4] defaults mode http # 默认模式为HTTP timeout connect 5000ms # 连接超时时间 timeout client 50000ms # 客户端超时时间 timeout server 50000ms # 服务器超时时间 # 监听端口80的配置 listen http_listen_80 bind *:80 # 绑定到80端口 mode http # 设置为HTTP模式 default_backend backend_servers_http # 指定默认后端 # 监听端口443的配置(支持HTTPS) listen https_listen_443 bind *:443 ssl crt /path/to/ssl/certificate.pem # 绑定到443端口并启用SSL[^2] mode tcp # 设置为TCP模式 default_backend backend_servers_https # 指定默认后端 # HTTP后端服务器配置 backend backend_servers_http balance roundrobin # 使用轮询算法进行负载均衡 server server1 192.168.1.10:80 check # 定义后端服务器1 server server2 192.168.1.11:80 check # 定义后端服务器2 # HTTPS后端服务器配置 backend backend_servers_https balance roundrobin # 使用轮询算法进行负载均衡 server server1 192.168.1.10:443 check # 定义后端服务器1 server server2 192.168.1.11:443 check # 定义后端服务器2 ``` #### 配置说明 - `bind *:80` 和 `bind *:443` 分别表示绑定到 80 和 443 端口。 - 在 `listen` 块中,可以通过 `mode http` 和 `mode tcp` 分别指定 HTTP 和 TCP 模式。 - 如果需要支持 HTTPS,则需要在 `bind` 中添加 `ssl` 参数,并指定 SSL 证书路径[^2]。 - `default_backend` 指定了流量转发的目标后端服务器组。 #### 注意事项 - 如果需要支持 SSL/TLS,请确保 HAProxy 已经编译支持 OpenSSL[^2]。 - 配置完成后,使用以下命令重启 HAProxy 服务以应用更改: ```bash systemctl restart haproxy ``` 或者手动启动: ```bash /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/cfg/haproxy.cfg ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值