Nginx日志频繁出现GET /false HTTP/1.1请求致应用崩溃求助
这问题我之前帮几个开发者排查过,核心是FeedifySW.js这个脚本存在错误的请求逻辑,反复向/false这个不存在的路径发起请求,大量404请求挤占服务器资源,最终导致应用偶尔崩溃。咱们一步步来解决:
定位脚本中的错误逻辑
先找到服务器上FeedifySW.js的存储位置,仔细检查脚本里的请求代码(比如fetch、XMLHttpRequest或者路由跳转相关的逻辑)。很大概率是某个变量值被错误地设置为布尔值false,然后被直接拼接到URL中,比如类似fetch('/' + someFlag)的写法,当someFlag为false时就会生成/false这个无效路径。重点排查脚本中涉及动态URL拼接的部分。临时拦截请求缓解服务器压力
如果暂时没法快速修复脚本,先在Nginx配置里添加拦截规则,直接对/false请求返回空响应,减少Nginx处理404的资源开销:location = /false { return 204; # 返回无内容的成功响应,比404更节省资源 }修改配置后记得执行
sudo nginx -s reload生效,先稳住应用不崩溃。检查Feedify服务的配置
Feedify是Web推送相关的服务,可能是你在集成时的后台配置出错了。登录Feedify管理后台,检查Web Push相关的所有URL配置项(比如回调地址、资源路径等),确认没有把某个参数错误设置为false。强制客户端刷新缓存的脚本
部分用户的浏览器可能已经缓存了有问题的FeedifySW.js,即使你修复了服务器上的脚本,客户端仍会使用旧版本。可以通过以下方式强制刷新:- 给脚本URL添加版本号,比如将引用路径从
FeedifySW.js改为FeedifySW.js?v=20240520 - 在Nginx中对该脚本设置更严格的缓存策略,比如:
location ~* FeedifySW.js { expires -1; # 禁止缓存 add_header Cache-Control "no-store, no-cache, must-revalidate"; }
- 给脚本URL添加版本号,比如将引用路径从
针对旧浏览器做兼容处理
从日志看,请求主要来自Android 6.0上的Chrome 54,这是比较老旧的浏览器版本,可能和FeedifySW.js中的某些现代API不兼容,导致脚本逻辑出错。可以在脚本中添加浏览器版本判断,避免在旧版本浏览器中执行有问题的请求逻辑,或者针对该版本浏览器做特殊兼容。
内容的提问来源于stack exchange,提问作者Dale

