网站刚放到服务器上,测试时后台能正常登录,过一阵子再点就提示无法访问、502、404,或者登录页刷不出来。这种情况我遇到过几次,多数不是程序突然坏了,而是环境里有个定时开关在起作用。刚部署时访问量小、日志少、连接少,一切正常;过段时间,资源、安全策略、过期机制或者定时任务开始生效,后台就被卡住了。
先看时间线。刚放上能进,过多久不能进?几分钟、几小时,还是第二天?这个信息很值钱。几分钟就挂,多半是内存、连接数、防火墙;几小时才挂,查session、证书、定时任务;第二天才挂,看日志切割、备份脚本、临时文件清理。
常见的一个坑是内存不够,进程被系统杀掉。PHP-FPM、Java、MySQL都吃内存,刚启动时占用低,后台能开。过一会儿爬虫、扫描器、定时任务上来,内存涨到顶,系统触发OOM killer,把MySQL或PHP-FPM干掉,后台就502或504。查dmesg -T | grep -i kill,再看free -m和top。如果确实被杀,加swap、限制PHP-FPM子进程数、调Java堆大小,或者把不用的服务关掉。临时重启能恢复,但不管的话过段时间还会挂。
磁盘和inode也容易被忽略。网站日志默认不切,access.log、error.log、MySQL binlog、临时session文件一直写。刚放上时没多少,过几天磁盘满,后台写session失败,登录不上,提示500或空白页。用df -h看空间,df -i看inode。清理旧日志,配logrotate,把session目录单独放,设置定时清理。别等满了才查,那时候数据库可能已经起不来了。
防火墙和安全软件会“过段时间”封IP。云服务器安全组、宝塔防火墙、云锁、安全狗、WAF,检测到后台路径被扫描或者登录失败次数多,会把你的IP拉黑。表现是前台正常,后台403、404或者连接超时。查防火墙日志,把自己的IP加白,后台路径改复杂点,加验证码。有些云厂商的CC防护也会误封,后台登录频繁就触发。

数据库连接数满也是典型。程序里连接没关,连接池泄漏,定时任务一直开着,MySQL的max_connections到顶,后台连不上库,提示too many connections或者直接502。刚启动连接少,过段时间累积满了。进MySQL执行show processlist,看Sleep连接多不多。临时重启数据库能进去,但得改代码,确保连接释放,调wait_timeout和连接池上限。
session和Redis过期同样会造成“刚登录能进,过会要重新登录”。PHP默认session.gc_maxlifetime是1440秒,也就是24分钟。系统临时目录清理任务还会把session文件删掉。用Redis存session的话,如果没开持久化,或者maxmemory满了开始淘汰,登录状态就丢了。表现是后台提示登录超时、请重新登录。把session保存路径改到独立目录,延长有效期,Redis开AOF或RDB,设置合理淘汰策略。
证书和CDN也会让后台过段时间进不去。Let''s Encrypt证书90天到期,自动续期失败,浏览器提示不安全,后台打不开。CDN如果缓存了后台页面或登录接口,token和cookie会乱,刚部署时缓存没命中,过段时间缓存生效,登录跳转异常。检查证书到期时间,CDN规则里排除后台路径,别缓存动态请求。
定时任务和备份脚本经常是幕后黑手。crontab里有个备份脚本,执行时把网站目录权限改成root,或者打包时占用大量IO,后台就卡住。logrotate切割日志后reload失败,Nginx或PHP-FPM没起来,也会导致后台无法访问。查crontab -l,看/var/log/cron,确认脚本执行时间和权限。刚放上没到执行点,过段时间执行了才出问题。
还有一种情况是服务器被入侵。挖矿木马占满CPU,或者被人放了后门,后台自然打不开。top里看有没有异常进程,netstat看陌生连接,检查authorized_keys和计划任务。刚部署时干净,过段时间被扫到漏洞,就会出问题。及时改端口、强密码、更新组件。
排查时别急着重装。先看Nginx错误日志、PHP-FPM慢日志、MySQL错误日志、系统messages和dmesg。按时间点对,刚放上能进说明代码和配置基本通,过段时间不能,通常是资源耗尽、安全拦截、过期机制或定时任务。把“过多久不能进”和“提示什么”记下来,顺着日志查,比盲目改配置快得多。