家庭实验室与自建服务器

用 Nginx Proxy Manager 在一台服务器上运行多个服务

如果一台服务器上运行的项目不止一个,迟早会遇到 80 和 443 端口冲突,因为同一个端口只能由一个进程监听。Selectel 博客发表在 Habr 上的这篇文章,一步步展示了如何用 Nginx Proxy Manager 解决这个问题。

作者首先说明问题所在:特权端口、一个端口只能有一个监听者、前后端分端口部署时的 CORS 问题,以及缺少 HTTPS。反向代理作为中间人,可以按域名和路径分发流量。另外一个好处是,防火墙只需开放 22、80 和 443 端口。

测试环境是一台 2 vCPU、2 GB 内存、40 GB NVMe 的 VDS,运行 Ubuntu 24.04,Docker 来自官方仓库。先用 docker network create proxy 创建网络,再启动挂载了数据和证书卷的 jc21/nginx-proxy-manager 容器。我很喜欢管理界面的 81 端口只绑定到 127.0.0.1,通过 SSH 隧道访问。

接下来配置代理主机:Forward Hostname 填容器名,SSL 证书在 SSL 标签页中绑定。测试使用的是 traefik/whoami。文章还单独讨论了应用直接运行在宿主机上的情况:通过 docker network inspect 获取 Docker 网络的网关地址,并设置防火墙,使应用无法绕过代理被直接访问。

文章也有一些不足:示例中混用了不同的域名,镜像使用了 latest 标签,随着时间推移可能影响可复现性。不过,对于想在家里或 VDS 上运行多个服务、又不想手动编辑 nginx 配置的人来说,这是一个很好的起点。

来源:Habr(Selectel 博客)

评论 0

来写第一条评论吧,用任何语言都行。

登录后评论