apache 作为反向代理对接 node.js 集群,不参与其进程管理;node.js 需用 cluster 模块自身启动多 worker 监听同一本地端口(如 127.0.0.1:3001),apache 仅通过 proxypass / http://127.0.0.1:3001/ 转发请求,并配置 proxypreservehost、超时及重试,会话与状态须外置 redis,进程守护应使用 pm2 或 systemd。

Apache 本身不直接参与 Node.js 的集群管理,它通常作为反向代理或静态资源服务器存在。Node.js 的集群模式(cluster 模块)是进程级的多核利用机制,必须由 Node.js 应用自身启动和维护。在生产环境中将 Apache 与 Node.js 集群结合,关键在于明确分工:Apache 负责入口流量接入、SSL 终止、静态文件服务和基础路由;Node.js 集群专注业务逻辑处理,并通过本地端口暴露给 Apache。
Apache 作为反向代理对接 Node.js 集群
Node.js 集群中的每个 worker 都监听同一个本地端口(如 localhost:3001),但操作系统会自动负载分发连接——这是 cluster 模块的默认行为。Apache 不需要感知 worker 数量,只需把请求代理到该端口即可:
- 配置
ProxyPass指向本地 Node.js 集群监听地址,例如:ProxyPass / http://127.0.0.1:3001/ - 启用
ProxyPreserveHost On,确保原始 Host 头透传给 Node.js - 添加超时和重试设置,避免因单个 worker 短暂不可用导致请求失败:
ProxyTimeout 30,ProxyBadHeader ignore
Node.js 集群需独立运行,不依赖 Apache 启动
集群逻辑必须写在应用启动脚本中,不能交由 Apache 控制。典型结构如下:
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
- 主进程(
isMaster)只负责 fork worker、监听退出并重启,不处理 HTTP 请求 - 每个 worker 进程启动 Express/Fastify 等框架,监听
127.0.0.1:3001(绑定本地地址,禁止外网直连) - worker 数量建议设为
os.cpus().length或os.availableParallelism(),避免过度创建 - 禁用
app.set('trust proxy', true)以外的信任设置,因 Apache 已做前置代理
状态共享与会话保持要绕过内存
集群下各 worker 内存隔离,无法靠 req.session(内存存储)维持登录态。必须外部化:
- 会话数据存 Redis,配合
express-session+connect-redis - 用户 Token 验证走 JWT 或 Redis 白名单,不依赖进程内变量
- 计数器、限流规则等状态类操作,使用 Redis 原子指令(如
INCR、SETNX) - 避免在 worker 中缓存全局数据,如需缓存请用
node-cache+ TTL,或统一走 Redis
进程守护与平滑升级不能靠 Apache
Apache 无法管理 Node.js 进程生命周期。生产中应使用专用进程管理器:
- 推荐 PM2:支持集群模式内置负载均衡(
pm2 start app.js -i max),自动日志聚合、内存监控、零停机重载(pm2 reload) - 也可用 systemd:编写 service 文件,设置
Restart=always、MemoryLimit和健康检查 - Apache 只需配置
ProxyPassReverse保证重定向头正确,不参与重启逻辑










