解决 history 路由跳转之后刷新页面 404

549 阅读2分钟

前言

刚入职一家新公司,项目还没有部署到服务器上,昨天部署好了,但是自己发现一个问题,就是面试题常见的 history 路由跳转之后刷新页面之后会 404,然后很简单的通过配置 nginx 解决了,记录一下

查看 nginx 配置文件在哪

whereis nginx
// 输出
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx

发现有多个目录,只能一个目录一个目录进去找了,在 /etc/nginx/nginx.conf 里找到了,但是发现这个 nginx 的配置并不像服务的配置,因为使用的是 https 的协议,然后在 /etc/nginx/conf.d 目录里找到了 www.conf 配置文件。

修改 nginx 配置文件

建议修改 nginx 配置文件的时候先备份一份老的配置下来,以免有问题能及时回退; 备份命令 eg:cp nginx.conf nginx_bak.conf ; 我是直接下载到我本地了。我这里是按照 vue 官方文档来修改的,详情

location / {
    #root html;  #Web网站程序存放目录。
    index index.html index.htm;
}

修改成

location / {
    # 解决 history 路由跳转刷新页面 404 
    try_files $uri $uri/ /index.html;
    #root html;  #Web网站程序存放目录。
    index index.html index.htm;
}

重启 nginx

修改了 nginx 配置之后还需要重启 nginx 服务才能生效;

1. 方法一重启:

直接执行 nginx -s reload
或者进入nginx安装目录sbin下,输入命令./nginx -s reload 即可;
查找 nginx 的可执 sbin 目录: nginx -V
查看命令输出的东西: configure arguments: --prefix=“安装路径”  --sbin-path=“sbin文件的路径”

cd /usr/local/nginx/sbin
./nginx -s reload

我没有在服务器上找到 --sbin-path,也就是nginx 的 sbin 目录,使用的是下面第二种方法

2. 方法二重启:

通过进程 pid 的方式重启,查找当前 nginx 的进程号:ps -ef|grep nginx
重启主进程 master process 就可以了: kill -hup pid

image.png