用户名和密码没有报错,点击“登录”后页面短暂跳转,随后又回到后台登录页。这种现象通常不是 ACL,也不一定是密码错误,而是登录成功后新会话没有在下一次请求中被识别。

观察结果优先检查
浏览器没有生成 admin Cookie Cookie Domain、Path、Secure、SameSite
Cookie 已生成但下一请求换了 Session ID Session 存储、Redis、负载均衡
只有 HTTPS 代理后失败 Offloader Header、Base URL、代理协议
只有某一台节点失败 env.php、crypt key、共享 Session

从浏览器保存的 Cookie 开始

在开发者工具 Application/Storage 中查看后台域名的 Cookie。记录名称、Domain、Path、Secure、SameSite 和过期时间,不要把 Cookie 值复制到工单或日志。

bin/magento config:show web/cookie/cookie_domain
bin/magento config:show web/cookie/cookie_path
bin/magento config:show web/cookie/cookie_httponly
bin/magento config:show web/secure/use_in_adminhtml
bin/magento config:show web/secure/base_url

后台地址使用 admin.example.com,Cookie Domain 却限制在另一个域名时,浏览器会拒绝或不回传 Cookie。HTTPS 后台若生成非 Secure Cookie,也要检查 Magento 是否正确识别代理后的原始协议。

确认 Session 是否写入共享存储

grep -nA25 "'session'" app/etc/env.php
redis-cli -h redis.example.internal -p 6379 PING
redis-cli -h redis.example.internal -p 6379 INFO memory | head -n 20
find var/session -maxdepth 1 -type f -mmin -5 | head

站点配置 Redis 却同时在 var/session 生成文件,说明 CLI 与 Web 可能读取了不同 env.php 或不同 release。多节点站点若使用本地文件 Session,登录请求落到 A 节点、下一请求落到 B 节点,就会立即退出。

反向代理后的协议识别

curl -skI https://admin.example.com/backend/ | egrep -i 'location|set-cookie|x-forwarded'
nginx -T 2>/dev/null | grep -nE 'X-Forwarded-Proto|fastcgi_param HTTPS|proxy_set_header Host' | head -n 60

负载均衡终止 TLS 时,源站收到的是 HTTP。需要把原始协议安全地传给应用,并确保 Magento 的 offloader header 配置与代理一致。不要信任来自公网客户端任意伪造的 X-Forwarded-Proto,应由受控代理覆盖该 Header。

多节点只失败一部分请求

sha256sum app/etc/env.php app/etc/config.php
grep -n "'key'" app/etc/env.php
hostname

各节点 crypt key 和 Session 配置必须一致,但不要把 key 输出到聊天或监控。可临时在响应头增加不含敏感信息的节点名,确认登录前后落到哪台机器,定位完成后移除。

最终用全新无痕窗口连续登录、打开三个后台页面、等待 Session 闲置时间后再操作。只验证“登录一次成功”不足以排除 Session 过期或节点切换问题。