Appearance
问题现象
登录平台后台(Admin)或门店后台(Store)时,点击登录提示“登录成功”,但紧接着页面跳转后立即弹出“登录状态已过期”或直接退回登录页面(接口返回 401 或 410003 Token 异常)。
根本原因
- Nginx 反向代理未透传鉴权请求头:EBAOZU 的 API 鉴权依赖 HTTP 请求头中的
Authori-zation或Authorization。若 Nginx 反向代理配置缺少自定义请求头透传,后端将无法接收到前端上送的 Token。 - 多系统 Redis 缓存冲突:同一服务器上部署了多套系统,未隔离 Redis 数据库号(
SELECT)或缓存前缀(PREFIX),导致刚写入的 Token 被其他系统的请求覆盖或清空。 - Redis 服务异常或未重启 Swoole:修改了
.env后未重启 Swoole,常驻进程仍在使用旧的缓存连接或过期密钥。 - 服务器系统时钟偏差:服务器系统时间比标准时间快或慢较多,导致签发的 JWT Token 的
exp(过期时间)或nbf(生效时间)校验失败。
解决步骤
检查 Nginx 反向代理配置中的 Header 透传
打开站点 Nginx 配置文件,确认反向代理 location / 块中包含以下请求头配置:
nginx
location / {
proxy_pass http://127.0.0.1:20697; # 替换为你配置的Swoole端口
proxy_http_version 1.1;
# 关键鉴权头透传
proxy_set_header Authori-zation $http_authori_zation;
proxy_set_header Authorization $http_authorization;
# 客户端真实 IP 与 Host
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket 支持
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}隔离 .env 中的缓存前缀与 Redis 库
编辑项目根目录 .env 文件,确保缓存前缀与 Redis 库号独立:
ini
[CACHE]
DRIVER = redis
PREFIX = ebaozu_v4_admin_
TAG_PREFIX = tag_ebaozu_v4_
[REDIS]
REDIS_HOSTNAME = 127.0.0.1
PORT = 6379
REDIS_PASSWORD = your_redis_password
SELECT = 0校准服务器系统时间
在终端执行 NTP 时间同步:
bash
ntpdate pool.ntp.org || chronyc makestep
date重启 Swoole 守护进程
在 Supervisor 管理器中重启该站点的守护进程:
bash
supervisorctl restart ebaozu_v4重启完成后,重新在浏览器中打开后台进行登录测试。