You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理场景下能否调用浏览器缓存返回Vaadin PWA的offline.html

问题解答

第一个问题:是否可以实现Nginx触发浏览器返回缓存的offline.html?

直接给出结论:Nginx作为服务端程序,没有权限主动调用浏览器本地存储或Service Worker中的缓存资源。你之前无反向代理时的离线回退逻辑本质是:浏览器端注册的Service Worker检测到网络请求失败(无服务端响应)后,主动从本地缓存拉取offline.html返回,和服务端无关。

你当前配置失效的核心原因是:即使你关闭了Nginx默认的错误页逻辑,Tomcat离线时Nginx仍然会返回完整的502状态码响应(包含默认的响应内容),浏览器会判定该请求已经拿到了服务端的有效响应,不会触发Service Worker的离线回退逻辑。

如果要复用Vaadin原生的PWA离线逻辑,可以调整Nginx配置,让上游(Tomcat)返回502/503错误时,Nginx直接断开连接不返回任何内容,模拟网络故障场景触发Service Worker的回退逻辑,配置参考:

location / {
    proxy_pass http://tomcat_upstream; # 替换为你的Tomcat上游配置
    proxy_intercept_errors on;
    # 上游返回502/503时返回Nginx特殊状态码444:直接关闭连接,不返回任何响应内容
    error_page 502 503 =444;
}

注意:该方案仅对已经访问过网站、完成Service Worker注册的用户生效,首次访问网站时Tomcat就离线的场景下,用户未注册Service Worker,不会触发离线回退,会显示浏览器默认的连接失败页面。

第二个问题:是否只能自行创建502.html配置为Nginx自有资源返回?

这是兼容性更好的备选方案,适用所有场景,包括用户首次访问时Tomcat离线的情况:

  • 你可以直接把Vaadin项目中生成的offline.html拷贝到Nginx的静态资源目录,避免重复开发,保证用户体验统一
  • 对应Nginx配置参考:
error_page 502 503 /502.html;
location = /502.html {
    root /usr/share/nginx/html; # 替换为你存放502.html的实际路径
    internal; # 禁止用户直接访问该路径
}

内容的提问来源于stack exchange,提问作者Avec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:54:06