单台物理机上实现三环境隔离,核心是请求特征识别+精准路由+独立资源边界:通过域名(dev/test/app.example.com)或路径前缀分流,配合独立端口、配置文件(dev.conf等)、静态目录、SSL证书、日志及systemd/Docker进程隔离,并强化防火墙与响应头标识,杜绝交叉污染。

在单台物理机上用反向代理实现开发、测试、生产环境的流量隔离,核心不是靠机器数量,而是靠请求特征识别 + 精准路由 + 独立资源边界。关键在于让三套服务互不感知、互不影响,同时避免端口冲突、配置污染和误发布风险。
按域名或路径前缀做严格分流
这是最常用也最稳妥的方式。Nginx 或 Nginx Proxy Manager 都支持基于 Host 头或 URI 路径匹配转发:
- 开发环境:dev.example.com → 转发到 127.0.0.1:3000(前端) + 127.0.0.1:8080(后端)
- 测试环境:test.example.com → 转发到 127.0.0.1:3001 + 127.0.0.1:8081
- 生产环境:app.example.com → 转发到 127.0.0.1:3002 + 127.0.0.1:8082
注意:每个环境必须使用独立的监听端口和进程,不能共用同一组后端服务实例。域名解析可在本地 hosts 文件临时配置,上线时交由 DNS 控制。
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
为每个环境分配独立配置与数据目录
避免配置混用是隔离成败的关键:
- Nginx 配置建议拆分为
dev.conf、test.conf、prod.conf,分别 include 到主配置中 - 静态资源目录分离:/var/www/dev/、/var/www/test/、/var/www/prod/,各环境只读各自路径
- SSL 证书独立管理:Let’s Encrypt 可为不同域名自动签发,或使用自签名证书区分环境
- 日志文件分开写入:
access_log /var/log/nginx/dev_access.log等,便于问题定位
强化网络与权限层面的硬隔离
光靠配置分流还不够,需从系统层加固:
- 用 systemd 或 Docker 启动各环境服务,绑定不同用户(如
dev-user、test-user、prod-user),限制文件与内存访问 - 防火墙规则限制:仅开放 80/443 给公网;内部服务端口(如 3000、8080)禁止外部直连,只允许本机 Nginx 访问
- 设置
proxy_set_header X-Environment $host,让后端服务能识别当前所处环境,触发对应配置(如数据库连接串、功能开关) - 禁用跨环境跳转:在 Nginx 中拦截
location /admin类敏感路径,仅允许 prod 域名访问
自动化部署与防误操作机制
人工改配置容易出错,建议嵌入防护逻辑:
- CI/CD 流水线中加入环境校验:提交含
prod字样的配置时,强制要求二次确认或审批 - 用脚本检查端口占用:部署前验证目标端口未被其他环境占用,避免服务启动失败
- 启用 Nginx 的
include指令动态加载配置,上线时 reload 而非 restart,减少中断 - 为测试和开发环境加响应头:
add_header X-Env-Status "TESTING";,浏览器开发者工具一眼可辨

















