NocoBase CLInb proxy nginx status命令详解:查看 Nginx 代理运行状态
【免费下载链接】nocobaseNocoBase is an open-source AI + no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase
nb proxy nginx status是 NocoBase CLI 中用于查看当前 Nginx 反向代理运行状态的核心命令,它会基于当前选中的 driver(local或docker)输出代理进程状态、配置文件位置以及运行环境等关键信息。读完本文你将掌握该命令的用法、每个输出字段的含义与取值、不同 driver 下的输出差异,以及它背后的源码级状态检测原理,并能将其嵌入 Nginx 代理的日常运维与排障流程。
命令背景:nb proxy nginx命令组
在 NocoBase 的 CLI 体系中,nb proxy nginx是 Nginx provider 的命令组入口(源码见 index.ts)。它负责两件事:
- 选择 Nginx 的运行方式,即
local(本机直接运行 Nginx 进程)或docker(以容器方式运行 Nginx); - 为 CLI 托管的 env 生成、启动、重载和检查 Nginx 入口。
status命令是这一命令组中的"状态观察"节点,与use、current、generate、start、restart、reload、stop、info等命令协同工作。一个典型的运维流程是:
nb proxy nginx use docker nb proxy nginx generate --env app1 --host app1.example.com nb proxy nginx start nb proxy nginx status nb proxy nginx infostatus用于在启动、重载之后确认代理是否真正处于运行状态,是排障时最先执行的检查命令。
命令用法
nb proxy nginx status该命令无需任何参数,直接读取当前配置并输出一行行键值对信息。命令实现非常简洁(见 status.ts):
public async run(): Promise<void> { await this.parse(ProxyNginxStatus); const runtimeContext = await resolveNginxProxyRuntimeContext(); const status = await getNginxProxyStatus(runtimeContext); this.log(formatNginxProxyStatusLines(status).join('\n')); }其执行链路是:先通过resolveNginxProxyRuntimeContext()解析当前运行上下文(包括 driver、CLI 根目录、upstream host),再调用getNginxProxyStatus()采集状态,最后用formatNginxProxyStatusLines()格式化为文本输出。
输出字段详解
命令通常会输出以下信息,其中driver、status、config三项固定存在,最后一项根据 driver 不同而表现为nginx或container(源码见 proxy-nginx.ts):
driver: <local|docker> status: <running|stopped> config: <nginx 主配置文件路径> nginx: <nginx 可执行文件路径> # 仅 local driver或:
driver: docker status: running config: /apps/.nocobase/proxy/nginx/nocobase.conf container: <docker.container-prefix>-nginx-proxy image: nginx:latest各字段含义如下:
| 字段 | 可能取值 | 说明 |
|---|---|---|
driver | local、docker | 当前 Nginx 代理的运行方式,来源于配置项proxy.nginx-driver,默认值为local(见 cli-config.ts) |
status | running、stopped | 代理当前是否在运行,由state字段映射而来 |
config | 文件路径 | Nginx 主配置文件的输出位置,对应resolveEnvProxyMainOutputPath()的结果并映射到运行时根目录 |
nginx(local 时) | 可执行文件路径 | bin.nginx配置项指定的 Nginx 可执行文件,默认值为nginx |
container(docker 时) | 容器名 | 容器名默认格式为<docker.container-prefix>-nginx-proxy |
image(docker 时) | 镜像名 | 固定使用nginx:latest |
其中driver的可选值在源码中被定义为['local', 'docker'],且proxy.nginx-driver配置项在写入时会做严格校验,非法值会直接报错(见 cli-config.ts)。
两种 driver 下的状态判定逻辑
status的核心是getNginxProxyStatus()函数(见 proxy-nginx.ts),它会根据 driver 走两条完全不同的检测路径:
local driver:PID 文件探测进程
当 driver 为local时,命令会:
- 解析 Nginx 版本输出得到 PID 文件路径(
resolveLocalNginxPidPath()); - 读取 PID 文件,解析出整数 PID;
- 通过
process.kill(pid, 0)探测进程是否存在(见 proxy-nginx.ts)。
若 PID 无效或进程不存在,则判定为stopped;否则为running。此外还会读取bin.nginx配置项,输出 Nginx 可执行文件路径。这种方式不依赖 Nginx 自身的状态接口,仅通过系统进程信号探测,轻量且可靠。
docker driver:容器运行态探测
当 driver 为docker时,命令会:
- 解析容器名:
resolveNginxProxyContainerName(),格式为<docker.container-prefix>-nginx-proxy; - 通过
dockerContainerIsRunning(containerName)检查容器是否处于运行态(见 proxy-nginx.ts); - 额外输出
container(容器名)与image(固定为nginx:latest)字段。
docker driver 下config字段输出的路径以容器内运行时根目录/apps为基准(DOCKER_NGINX_PROXY_RUNTIME_ROOT = '/apps'),因为 Docker driver 会把宿主机NB_CLI_ROOT挂载到容器内/apps,配置文件随之映射为容器内路径。
实际运行示例
场景一:本地 Nginx 代理正在运行
$ nb proxy nginx status driver: local status: running config: /Users/alice/.nocobase/proxy/nginx/nocobase.conf nginx: /usr/sbin/nginx场景二:Docker 容器代理已启动
$ nb proxy nginx status driver: docker status: running config: /apps/.nocobase/proxy/nginx/nocobase.conf container: nb-nginx-proxy image: nginx:latest以上输出形态与仓库测试用例中的断言一致(见 proxy-nginx-command.test.ts),测试中同样覆盖了driver: local、status: running、config: /apps/.nocobase/proxy/nginx/nocobase.conf以及nginx: /usr/sbin/nginx等典型行。
场景三:代理未启动
若本地 Nginx 未启动或 Docker 容器已停止,status字段会显示stopped:
$ nb proxy nginx status driver: local status: stopped config: /Users/alice/.nocobase/proxy/nginx/nocobase.conf nginx: nginx此时可以结合nb proxy nginx start启动代理,再次执行nb proxy nginx status验证是否转为running。
使用建议与排障思路
- 先
status后info:status关注"进程/容器是否在运行",info关注"driver、配置路径等静态信息"。排障时先用status确认运行态,再用info核对 driver 与路径是否与预期一致。 - driver 不匹配时的表现:
status的输出完全取决于proxy.nginx-driver配置。如果此前通过nb proxy nginx use docker切换了 driver,但实际容器未启动,status会如实显示driver: docker与status: stopped,可通过nb proxy nginx start拉起容器。 - 配置文件路径核对:
config字段指向 Nginx 主配置文件,若代理状态为running但站点访问异常,可以沿该路径检查生成的 Nginx 配置内容是否正确。
相关命令
nb proxy nginx— Nginx provider 命令组入口nb proxy nginx use— 切换 Nginx driver(local/docker)nb proxy nginx info— 查看 driver、配置路径与运行信息nb proxy nginx start— 启动 Nginx 代理nb proxy nginx stop— 停止 Nginx 代理nb proxy nginx reload— 重载 Nginx 配置nb proxy nginx restart— 重启 Nginx 代理nb proxy— 代理命令组总入口(支持 nginx 与 caddy 两种 provider)
相关源码文件:命令实现位于 status.ts,核心状态采集与格式化逻辑位于 proxy-nginx.ts,driver 配置解析位于 cli-config.ts,行为验证可参考 proxy-nginx-command.test.ts。
【免费下载链接】nocobaseNocoBase is an open-source AI + no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考