家用住宅主机Linux Docker
如果你手里有一台旧笔记本或树莓派,装了Linux系统(如Ubuntu、Debian),希望用它来统一转发多个内网Web服务到公网,那么用Docker Compose模板搭建一个Nginx反向代理中转站是最省心的方案。
本文全程按零基础可复现的方式写,关键步骤包括编写可复用的 docker-compose.yml 和 Nginx 配置模板,并附带高频报错排查和验证方法。
硬件与系统准备
- 主机配置:CPU 1核以上,内存1GB以上,硬盘10GB剩余空间。
- 操作系统:建议 Ubuntu 20.04 / 22.04 或 Debian 11 / 12 的 64 位版本。
- 网络:主机需要有公网IP(或内网IP + 路由器端口转发),并且防火墙允许 80 和 443 端口入站。
Docker 与 Docker Compose 安装
如果你还没有安装 Docker,按以下命令安装(以 Ubuntu 为例):
# 更新系统包
sudo apt update && sudo apt upgrade -y
# 安装依赖
sudo apt install -y ca-certificates curl
# 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 添加仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动并设置开机自启
sudo systemctl enable docker && sudo systemctl start docker
# 验证安装
docker --version && docker compose version
注意:如果你使用非 root 用户,建议将用户加入docker组(sudo usermod -aG docker $USER),然后重新登录生效。
编写可复用的 Docker Compose 模板
我们创建一个固定的工作目录,后续所有中转站服务都通过修改这个目录下的配置来复用模板。
mkdir -p ~/proxy-station && cd ~/proxy-station
在目录下创建 docker-compose.yml 文件,内容如下(这是最简模板,后面可以复制修改):
version: '3.8'
services:
nginx-proxy:
image: nginx:alpine
container_name: nginx-proxy
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/proxy.conf:ro
- ./logs:/var/log/nginx
这个模板很简洁:使用 Nginx 的 Alpine 镜像,映射了 80 和 443 端口,挂载了自定义的 nginx.conf 和日志目录。
当你要部署新的中转规则时,只需复制这个目录,修改 nginx.conf 即可。
配置 Nginx 中转规则
在同一个目录下创建 nginx.conf 文件,
下面是一个反向代理示例,
将 proxy.example.com 的请求转发到内网 IP 为 192.168.1.100: 的服务:
3000
server {
listen 80;
server_name proxy.example.com; # 替换成你的域名
location / {
proxy_pass http://192.168.1.100:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
如果你有多个内网服务,可以复制多个 server 块。
创建 logs 目录(mkdir logs)以避免权限问题。
启动与检查
cd ~/proxy-station
sudo docker compose up -d
# 或者如果你使用旧版docker-compose:docker-compose up -d
查看运行状态:
docker compose ps
应该能看到 nginx-proxy 容器状态为 Up。
访问你的域名或公网IP,应能看到内网服务的页面。
高频问题与避坑指南
Q1:启动后访问不了,显示“Connection refused”?
检查内网服务是否在对应IP和端口上运行。
可以 curl 192.168.1.100:3000 在主机上测试。
Q2:报错“bind: address already in use”?
表示 80/443 端口已被占用。
先 sudo lsof -i :80 查看哪个进程占用,关闭冲突服务(如 Apache)。
Q3:如何复用模板快速搭建第二个中转站?
复制整个文件夹:cp -r ~/proxy-station ~/proxy-station2,然后修改 nginx.conf 中的 server_name 和 proxy_pass,并修改 Compose 中的 container_name 和端口映射(比如 81:80 和 444:443)。
启动时进入新目录执行 docker compose up -d。
Q4:Docker Compose 命令找不到?
请确认你安装了 docker-compose-plugin 并使用 docker compose(带空格)。
如果系统只有旧版 docker-compose(带横杠),请先安装 sudo apt install docker-compose。
避坑说明:
- 不要使用
network_mode: host,否则端口映射可能冲突,且失去隔离性。 - 如果 SSL 证书需要,建议在 Nginx 容器内用 certbot 或者将证书文件挂载进去,本文不做展开。
- 确保防火墙(ufw/iptables)放行了 80、443 端口。
效果验证
- 在浏览器输入你设置的域名(或公网IP),如果能正常显示内网服务页面,说明中转站搭建成功。
- 查看日志:
docker compose logs -f可以实时看到请求记录。 - 修改
nginx.conf添加新的server块后,执行docker compose exec nginx-proxy nginx -s reload即可生效,无需重启容器。
如果你正在用家用住宅主机搭建中转站,强烈建议先用这个模板跑通基本流程,再根据实际需求调整代理规则。
遇到报错时,优先检查端口占用、内网连通性和 Docker 服务状态。
更多进阶用法(如HTTPS、负载均衡)可以查阅Nginx文档后在本模板基础上扩展。