团队共享场景与风险
共享节点上,HTTPS 入口往往与「人能连上」的 SSH/VNC 并存:CI 回调、OpenClaw 网关、临时演示站都会争用同一台机器。风险集中在四块:443 单租户(多进程抢端口)、证书漂移(手工拷贝 PEM 过期未换)、长连接饿死短请求(Dashboard WebSocket 占满 worker)、观测不足(无分路由日志与限流,排障靠猜)。入口代理的职责应是:统一 TLS、把后端留在本机回环或 Unix socket、并把「谁能打哪个路径」写进配置与文档。
两种方案对比矩阵
下列对比面向「小团队、单台或少量远程 Mac、需要快速上线 HTTPS」的默认假设;若你已维护大规模 Nginx 模块链,结论会向 Nginx 倾斜。
| 维度 | Nginx | Caddy |
|---|---|---|
| 证书自动化 | 通常配合 certbot/lego 等外部 ACME;需关心续期钩子与 reload | 内置自动 HTTPS,默认 ACME;续期与重载路径更短 |
| 配置复杂度 | 显式块多,适合复杂 location、多 upstream 与细粒度头控制 | Caddyfile 更短,学习曲线低;极复杂路由仍可能回到 Nginx |
| WebSocket / 长连接 | 需手写 Upgrade、Connection、proxy_read_timeout;可控性强 | 反向代理默认处理较省心;长超时同样需显式声明 |
| 日志与限流扩展 | access_log 分流、limit_req/conn、第三方模块生态成熟 | 有请求日志与 handler;高阶限流/ACL 常需插件或前置另一层 |
| TLS 续期运维成本 | 中:脚本+监控+reload 演练 | 低到中:内置为主,仍要监控失败与 DNS 变更 |
| 延迟观感 | 事件模型成熟;调优 keepalive 后与 Caddy 同量级常见 | 默认 HTTP/2、自动证书;极端高并发需压测再定 worker |
可执行配置与参数阈值
阈值(小团队缺省):worker_processes 用 auto;单实例 worker_connections 建议 2048~8192,以 ulimit -n 的约一半为上限预留文件描述符。回环 upstream 的 keepalive 连接池常用 16~64 个空闲连接;全局 keepalive_timeout 60~75s 较通用。WebSocket 或 SSE 路由将 proxy_read_timeout 提到 3600s 并关闭代理缓冲。
Nginx 片段(TLS 路径与证书名请替换):
worker_processes auto;
events { worker_connections 4096; }
http {
keepalive_timeout 65s;
upstream app_local {
server 127.0.0.1:8080;
keepalive 32;
}
server {
listen 443 ssl http2;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
location / {
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Connection "";
proxy_pass http://app_local;
}
location /ws {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
proxy_buffering off;
proxy_pass http://app_local;
}
}
}
Caddy 2 片段(域名与上游端口替换):
app.example.com {
reverse_proxy 127.0.0.1:8080 {
transport http {
keepalive 32s
keepalive_idle_conns 64
read_timeout 3600s
write_timeout 3600s
}
}
}
改完后执行 nginx -t 再 reload,或 caddy validate --config Caddyfile 再 reload;用 curl -I --http2 与浏览器验证 WebSocket 握手。
远程 Mac 上最小可复现部署步骤
- 安装:
brew install nginx或brew install caddy;用sudo lsof -i :443确认无抢占。 - DNS:将域名 A/AAAA 指到该 Mac 公网或隧道出口;云厂商安全组放行 80/443(HTTP-01 需 80)。
- 证书:Caddy 可声明站点即签发;Nginx 走 certbot
--nginx或独立 webroot,并把 PEM 放在非全局可读目录。 - 上游:业务只绑
127.0.0.1或 socket,禁止对公网直连应用端口;与团队约定端口段。 - 持久化:用 launchd plist 或 brew services 拉起;日志轮转与证书到期告警写入同一 runbook。
常见问题
问:443 已被占用怎么办?
合并到同一反代,或改非标准端口并用前端隧道/负载均衡终结 TLS。不要多人各起一套 443。
问:反代到多个后端要注意什么?
按路径或子域拆分;Webhook 与 UI 分 upstream;对公开路径加限流与独立日志,避免一条长连接拖垮其它路由。
问:和 SSH/VNC 入口是什么关系?
HTTPS 代理解决的是应用层协作流量,不替代远程桌面与 shell;权限与跳板策略仍按 SSH 文档执行。
小结与下一步
需要最少 TLS 胶水、快速迭代时优先考虑 Caddy;已有大量 Nginx 模板、依赖复杂限流与模块时保留 Nginx。无论选哪边,共享节点都要固定 443 归属、keepalive 池与长连接路由三类参数,并把续期失败纳入告警。
若你希望多节点分担入口与构建、减少单台 Mac 上的端口与证书纠缠,可在 MeshMac 购买与套餐公开页 选择节点组合,并查阅 帮助中心 了解交付与网络约定;博客首页 meshmac.com/zh 亦提供总览。