Angular SSR应用部署到Nginx后浏览器后退导航无数据如何解决?
问题场景
我有一个部署在Nginx服务器上的Angular SSR应用,具体表现如下:
- 列表页发起API调用获取数据,生成指向其他页面的链接
- 点击任意链接跳转到对应页面并拉取数据
- 点击浏览器后退按钮返回列表页时无数据展示,原因是未触发API调用
已知情况
- 本地环境运行完全正常
- Nginx生产环境中,使用页面内其他按钮触发返回导航时功能正常
Nginx配置
server { server_name mydemosite; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/ncladmin/demosite/mydemosite; } #location /pages/ { # include proxy_params; # proxy_pass mydemourl; # proxy_set_header Host mydemogurl; #} location / { include proxy_params; proxy_pass http://unix:home/ncladmin/mydemosite/mydemosite.sock; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/mydemosite/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mydemosite/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = mydemosite) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; server_name mydemosite; return 404; # managed by Certbot }
构建信息
客户端构建产物
| 初始块文件 | 名称 | 大小 |
|---|---|---|
| main.61fa0bcbd5bdfcba15eb.js | main | 283.33 kB |
| styles.9ead987bd4edd86dd57c.css | styles | 125.30 kB |
| polyfills.297e52098208f3025ef2.js | polyfills | 36.66 kB |
| runtime.5dfcb54aae720d1a33d0.js | runtime | 2.27 kB |
| 初始总大小 | - | 447.56 kB |
| 懒加载块文件 | 名称 | 大小 |
|---|---|---|
| 1.83954724103e60c4ed8c.js | - | 142.25 kB |
| 5.c5db6147620ba74d2da0.js | - | 32.53 kB |
| 6.43c0aec6f6d8bd88beb8.js | - | 3.94 kB |
构建时间:2021-07-02T09:00:13.003Z,Hash:ceb338239b5ec146751f,构建耗时:61182ms
服务端构建产物
✔ Server application bundle generation complete.
| 初始块文件 | 名称 | 大小 |
|---|---|---|
| main.js | main | 2.73 MB |
| 初始总大小 | - | 2.73 MB |
| 懒加载块文件 | 名称 | 大小 |
|---|---|---|
| vendorsmodules-content-pages-content-pages-modulemodules-home-home-module.js | vendorsmodules-content-pages-content-pages-modulemodules-home-home-module | 357.24 kB |
| modules-content-pages-content-pages-module~modules-home-home-module.js | modules-content-pages-content-pages-module~modules-home-home-module | 160.14 kB |
| modules-content-pages-content-pages-module.js | modules-content-pages-content-pages-module | 26.83 kB |
| vendors~modules-content-pages-content-pages-module.js | vendors~modules-content-pages-content-pages-module | 24.15 kB |
| modules-home-home-module.js | modules-home-home-module | 4.84 kB |
需提供的排查代码清单
- 列表页组件的完整代码,重点包含生命周期钩子(ngOnInit、ngOnDestroy等)、数据请求触发逻辑、路由事件订阅、RxJS订阅清理的相关代码
- 项目根路由配置以及列表页、详情页所属模块的路由配置代码,包含路由复用策略、onSameUrlNavigation配置、resolve守卫相关的定义
- Angular SSR相关配置代码,包含app.server.module.ts、TransferState使用逻辑、服务端和客户端数据状态同步的相关代码
- 页面内返回按钮的导航实现代码,以及项目中全局路由守卫、Location服务相关的自定义逻辑
- Nginx中所有涉及Cache-Control、页面缓存、静态资源缓存的配置,以及angular.json中生产环境构建的outputHashing相关配置
内容的提问来源于stack exchange,提问作者Preetam Singh
相关产品推荐
相关产品推荐

