家用住宅主机Linux haproxy负载均衡多住宅服务器
为什么要在家用主机上用 HAProxy 做负载均衡
如果你家里有两台或更多服务器(比如一台跑 NAS 文件共享、一台跑个人网站、一台跑开发测试环境),每次都记不同 IP 和端口很麻烦。
用 HAProxy 装在其中一台 Linux 主机上,就能把所有流量统一到一个入口,还能自动把请求分到不同的后端服务器,既减少单点压力,又方便管理。
本文用的家用主机是一台普通 Intel NUC 装 Ubuntu 22.04,后端两台服务器都在同一局域网内。
步骤同样适用于树莓派、旧笔记本等设备。
准备条件
- 一台已装好 Linux 的家用主机(本文以 Ubuntu / Debian 为例)
- 至少一台后端服务器(IP 需要可访问,比如
192.168.1.101和192.168.1.102),分别监听 8080 端口 - 确保家庭路由器已为 HAProxy 主机分配固定内网 IP,并做好端口转发(如果需要外网访问)
- 准备好 SSH 或直接连显示器操作
安装 HAProxy 并验证版本
在 HAProxy 主机上运行:
sudo apt update
sudo apt install haproxy -y
haproxy -v
输出类似 HA-Proxy version 2.6.* 即可。
编写 HAProxy 配置文件
配置文件路径 /etc/haproxy/haproxy.cfg。
用 sudo nano 或 vim 编辑:
sudo nano /etc/haproxy/haproxy.cfg
清空内容,填入以下配置(根据你的实际 IP 和端口修改):
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
frontend myfrontend
bind *:80
default_backend myservers
backend myservers
balance roundrobin
server srv1 192.168.1.101:8080 check
server srv2 192.168.1.102:8080 check
关键点说明:
bind *:80表示监听所有网卡的 80 端口;如果改为127.0.0.1:8080仅本地访问。balance roundrobin是轮询算法,还有leastconn(最小连接)等可选。server行最后的check表示开启健康检查,如果后端挂掉会自动踢出。
检查配置并启动服务
先检查语法:
sudo haproxy -f /etc/haproxy/haproxy.cfg -c
显示 Configuration file is valid 后继续。
启动并设置开机自启:
sudo systemctl restart haproxy
sudo systemctl enable haproxy
sudo systemctl status haproxy
状态显示 active (running) 即成功。
避坑与常见问题
端口被占用:如果 80 端口被 Apache/Nginx 占用,先停掉或改 HAProxy 端口。
检查方法:sudo netstat -tulpn | grep :80
防火墙未放行:Ubuntu 默认可能没开端口,执行 sudo ufw allow 80/tcp 再重载 sudo ufw reload。
后端服务器无健康检查响应:默认 HAProxy 只检查 TCP 连接状态,如果后端返回 404 或 500 也会视为正常。
可在 backend 加一行 option httpchk GET / 尝试特定的健康检查路径。
配置文件语法错误:常见原因是缩进使用了 Tab 或多余空格,务必保持每行开头连续空格对齐。
效果验证
在局域网内另一台电脑打开浏览器,输入 HAProxy 主机的内网 IP(例如 192.168.1.100)。
多次刷新页面,观察后端服务器的日志,如果看到请求轮流落在这两台服务器上,说明负载均衡生效。
你也可以用 curl 测试:
curl -I http://192.168.1.100
查看返回头中的 Server 字段,或者直接看后端日志文件(例如 /var/log/nginx/access.log)。
常见问题速查
Q: 访问 HAProxy 页面返回 503
A: 所有后端服务器都不可用或端口不通。检查网络连接或后端服务状态。
Q: 只有一台服务器收到请求
A: 可能是 balance 算法导致或健康检查把另一台标记为 down。用 sudo systemctl status haproxy 查看日志是否提示 Server srv2 is DOWN。
Q: 日志在哪里看
A: HAProxy 的访问日志默认通过 rsyslog 写入 /var/log/haproxy.log,如果没有则需单独配置 rsyslog。
掌握这些步骤,家用主机上的多服务负载均衡就能跑起来了。
后续可以根据需要添加 SSL 终止、ACL 路由等高级功能。