Skip to content

常见问题

收集部署过程中最容易遇到的系统、Node、PM2、Nginx 和微信公众号登录问题,以及对应处理方式。

sudo apt update 提示 apt not found

说明你的服务器不是 Ubuntu,而是 RPM 系统,例如 Alibaba Cloud Linux。

Alibaba Cloud Linux 使用:

bash
sudo dnf update -y

如果没有 dnf,再试:

bash
sudo yum update -y

Node.js 20 提示 glibc 版本太低

如果看到:

text
Requires: glibc >= 2.28
Installed: glibc-2.17

说明系统太旧。不要强行升级 glibc,建议更换系统到 Alibaba Cloud Linux 4 LTS / 3 或 Ubuntu 22.04/24.04。

PM2 status 是空表格

说明还没有启动任何进程。需要先执行:

bash
PORT=3000 \
SITE_ORIGIN='https://example.com' \
WECHAT_TOKEN='你的Token' \
WECHAT_ALLOWED_OPENIDS='openid1' \
pm2 start server/index.js --name my-site

Process or Namespace not found

说明 PM2 里没有这个名字的进程。先看:

bash
pm2 status

再使用表格里的 name 重启:

bash
pm2 restart my-site --update-env

EADDRINUSE: address already in use

说明端口已经被另一个 Node 进程占用,常见于重复启动了两个 PM2 进程。

先看:

bash
pm2 status

删除重复进程后只保留一个:

bash
pm2 delete my-site

再重新启动。

Invalid URL,base 里有中文引号

环境变量里不能使用中文引号:

text
‘https://example.com’

应该使用英文引号:

bash
SITE_ORIGIN='https://example.com'

微信后台配置返回 HTTP 非 200

先确认:

  • Nginx 已经反代到 Node。
  • Node 服务在线。
  • URL 是 /api/wechat/callback
  • WECHAT_TOKEN 和公众号后台 Token 完全一致。
  • 消息加解密方式先使用明文模式。

手动 curl 回调返回 403

这是正常的:

bash
curl -i https://example.com/api/wechat/callback

手动请求没有微信签名,后端应该拒绝。

微信验证码登录没有回复

检查公众号后台:

  • 服务器配置已启用。
  • 消息加解密方式是明文模式。
  • 消息格式是 XML。
  • URL 是 https://example.com/api/wechat/callback

再看 Nginx access log:

bash
sudo tail -f /var/log/nginx/access.log

发送公众号消息后,应该出现 POST /api/wechat/callback

api unauthorized 48001

这是公众号接口权限不足。个人订阅号通常不能创建带参数二维码,所以不能依赖扫码二维码登录。

解决方案是改用“公众号消息验证码登录”。

invalid ip 40164

说明公众号接口 IP 白名单没有包含服务器公网 IP。到公众号后台添加服务器公网 IP 后再试。

如果已经改成验证码登录,通常不再需要调用创建二维码接口。