Nuxt静态部署后路由刷新报错

Aditya2021-09-03开发问题NuxtNginx

引子

在正常情况下,路由跳转没什么问题,但F5刷新网页会报错,在不同的路由下报错问题还都不太一样,因为是在生产环境下,很难定位问题。

报错问题汇总

  • Cannot read property '$scopedSlots' of undefined
  • n.setAttribute is not function()
  • ...

在正常情况下,路由跳转没什么问题,但F5刷新网页会报错,在不同的路由下报错问题还都不太一样,因为是在生产环境下,很难定位问题。

更离谱的是,这个包部署在其他生产环境并没有什么问题,单单在这个环境又问题。。。

问题定位

前面也说过,该版本是个稳定版本,控制变量法来排除问题,逐一排除之后,发现该环境的nginx与其他环境不太一样

location / {
	try_files $uri $uri/ =404;
	#try_files $uri $uri  /index.html;
}

查看了其他几个服务器配置都是try_files $uri $uri/ =404;

但是也有个例外也是try_files $uri $uri /index.html;

这就蛋疼了。

但死马当活马医,更换成

try_files $uri $uri/ =404;

nginx -s reload

启动!

比较玄学的时刻来临了,我自个刷新了几次都没啥问题,我以为问题解决了,给其他人演示,竟然域名后面跟着端口号了!

https://xxx.xxx.xxx:11080/xxx/xx

并不是稳定复现,偶现问题。

这就很蛋疼了。

port_in_redirect off;

既然域名后面带端口号,那就去查询一下nginx如何去掉它。

神奇代码port_in_redirect

通过指定port_in_redirect off;告知nginx在redirect的时候不要带上port,如果没有配置,默认该值为true

				port_in_redirect off;
        location / {
                try_files $uri $uri/ =404;
        }

至此,该问题解决了。

写在最后

这个问题定位初期,简直有点怀疑人生了,一开始觉得是包打的有问题,折腾了半天一无所获;到后面觉得代码写的有问题,因为有部分页面结构是渲染出来的,然鹅却无法定位到底是哪里有问题,一度到放弃;最后面就是折腾nginx,所幸的是找到了合适的解决方案。

Last Updated 2024/12/27 11:36:49