Nginx解决单页应用刷新报错404的问题

news2025/1/19 14:09:51

一、问题

1.1 问题概述

将React应用打包后,部署到服务器上,在非首页的地方使用浏览器自带的刷新功能,页面刷新失败,显示404;

如果你的问题和我类似,可以往下看~

1.2 问题详细描述

在项目开发完成后,将应用通过 npm run build 打包,之后将该包部署到服务器上并通过Nginx将地址指向了服务器的包路径,Nginx的配置如下

server {
	listen 443 ssl;
	server_name xxxxx.xxxxxxx.com;
	# access_log  /var/log/nginx/access.log  main;
	# error_log  /var/log/nginx/error.log;

	ssl_certificate      /etc/nginx/cert/xxxxx.xxxxxx.xxx.pem;  #填写解压的pem文件
	ssl_certificate_key  /etc/nginx/cert/xxxxx.xxxxxx.xxx.key;  #填写解压的key文件

	# ssl on;
	ssl_session_cache    shared:SSL:10m;
	ssl_session_timeout  50m;

	ssl_ciphers  HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	location / {
		root /usr/share/nginx/html;
	}
}

此时,打开域名网页可正常浏览,也可以正常登录,但在登录后的页面使用浏览器的刷新功能,网页会报404,显示缺少资源;

二、解决

2.1 修改Nginx配置

将Nginx的配置改成如下:

server {
	listen 443 ssl;
	server_name xxxxx.xxxxxxx.com;
	# access_log  /var/log/nginx/access.log  main;
	# error_log  /var/log/nginx/error.log;

	ssl_certificate      /etc/nginx/cert/xxxxx.xxxxxx.xxx.pem;  #填写解压的pem文件
	ssl_certificate_key  /etc/nginx/cert/xxxxx.xxxxxx.xxx.key;  #填写解压的key文件

	# ssl on;
	ssl_session_cache    shared:SSL:10m;
	ssl_session_timeout  50m;

	ssl_ciphers  HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	location / {
        try_files $uri $uri/ /index.html;
		root /usr/share/nginx/html;
	}
}

和之前相比,加了这一行

try_files $uri $uri/ /index.html;

使用了try_files指令,意思是检查url是否存在,如果不存在则一直往后找,这里就相当于,先检查了$uri是否存在,如果不存在再检查$uri/是否存在,如果都不存在则定向到/index.html上;

2.2 造成的原因

造成404的根本原因是在服务器上找不到该路由地址,我们知道浏览器上的地址和服务器上的文件是一一对应的,换句话说,在浏览器上我们输入了xxx.com/a,那么当访问传到nginx里的时候,nginx就会去找这个/a对应的是什么,如果是静态文件,那么就将这个静态文件发送到浏览器,并显示在界面上

但我们知道,React和Vue之类的都是单页应用,整个站点上所有的内容都是集中在index.html里的,路由也是纯前端路由,浏览器地址发生改变时并不需要服务器去做相对应的操作,换句话说,也就是路由和服务端无关,并且nginx上也没有对应静态文件,因此访问不存在的路由服务器自然就会反馈前端404找不到资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1458240.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python爬虫之图形验证码的识别

爬虫专栏:http://t.csdnimg.cn/WfCSx 前言 目前,许多网站采取各种各样的措施来反爬虫,其中一个措施便是使用验证码。随着技术的发展,验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码,后来加入了英…

单片机01天---stm32基本信息了解

下载数据手册 以STM32F407ZG为例 网站:www.st.com,搜索芯片型号,下载“数据手册”使用 数据手册使用 查看芯片型号信息 芯片资源信息 时钟框图 芯片资源表格下方 GPIO口表格 一般位于下图后面的位置 ①工作电压:1.8V – 3.6V…

看小姐姐的效果棒极了,写了一个工具,逐帧解析视频转成图片,有没有带上商业思维的小伙伴一起研究下

一个突然的想法,促成了这个项目雏形。 原理是: 上传一个视频,自动将视频每一帧保存成图片 然后前端访问 就能实现如图效果 后端是python/flask 数据库mysql 前端uniapp 项目演示: xt.iiar.cn 后端代码如下: #学习…

从零开始学习Netty - 学习笔记 - NIO基础 - ByteBuffer: 简介和基本操作

NIO基础 1.三大组件 1.1. Channel & Buffer Channel 在Java NIO(New I/O)中,“Channel”(通道)是一个重要的概念,用于在非阻塞I/O操作中进行数据的传输。Java NIO提供了一种更为灵活和高效的I/O处理方…

原创java开源项目发布maven全球中央仓库详细过程示范和遇到的问题解决办法

文章目录 java项目上传到maven全球中央仓库(原创个人开源项目发布maven中央仓库详细过程示范)需求背景第一步 注册sonatype账号第二步 登录sonatype账号并申请新建项目第三步 准备个人GPG数字签名并发布到ubuntu第四步 准备maven配置第五步 修改项目配置…

【软考高级信息系统项目管理师--第二十四章:法律法规与标准规范】

🚀 作者 :“码上有前” 🚀 文章简介 :软考高级–信息系统项目管理师 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 第二十四章:法律法规与标准规范 商标专利法网络安全法 商标专利法 授…

【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)

阅读导航 引言一、生产者消费者模型二、环形队列简介三、基于环形队列的生产者消费者模型(C 代码模拟实现)⭕Makefile文件⭕ . h 头文件✅sem.hpp✅ringQueue.hpp ⭕ . cpp 文件✅testMain.cpp 温馨提示 引言 在上一篇文章中,我们深入探讨了…

408计算机网络--基础概论

学习计算机网络走以前需要首先明白一个大的概念,计算机网络通常分为通信子网(实现数据通信)和资源子网(实现资源共享/数据处理)七层妖塔 计算机网络:是一个将分散的、具有独立功能的计算机系统&#xff0…

【Leetcode 2415】反转二叉树的奇数层 —— 回溯法 | BFS

2415. 反转二叉树的奇数层 给你一棵 完美 二叉树的根节点root,请你反转这棵树中每个 奇数 层的节点值。 例如,假设第 3 层的节点值是[2,1,3,4,7,11,29,18],那么反转后它应该变成[18,29,11,7,4,3,1,2]。 反转后,返回树的根节点。…

【Redis,Java】Redis的两种序列化方式—nosql数据库

redis和mysql的区别: redis是属于nosql的数据库,而mysql是属于sql数据库,redis是属于nosql数据库。mysql是存储在磁盘中的,redis是存储在内存中的,所以redis的读取书读快。这里所说的redis代表nosql,而mysq…

【elk查日志 elastic(kibana)】

文章目录 概要具体的使用方式一:查找接口调用历史二:查找自己的打印日志三:查找错误日志 概要 每次查日志,我都需要别人帮我,时间长了总觉得不好意思,所以这次下定决心好好的梳理一下,怎么查日…

更改WordPress作者存档链接author和用户名插件Change Author Link Structure

WordPress作者存档链接默认情况为/author/Administrator(用户名),为了防止用户名泄露,我们可以将其改为/author/1(用户ID),具体操作可参考『如何将WordPress作者存档链接中的用户名改为昵称或ID…

【大模型 幻觉】CRAG:改进传统的 RAG,增加纠正机制提升生成文本的准确性

CRAG:改进传统的 RAG,增加纠正机制提升生成文本的准确性 提出背景CRAG 框架轻量级检索评估器大规模网络搜索分解再重组算法 提出背景 论文:https://arxiv.org/abs/2401.15884 代码:https://github.com/HuskyInSalt/CRAG 大型语言…

适合tiktok运营的云手机需要满足什么条件?

TikTok作为一款全球热门的社交媒体平台,具有无限的市场潜力。然而,卖家在运营过程中常常会面临到视频0播、账号被降权、限流等问题,甚至可能因为多人同时使用一个IP而导致封号的风险。为了规避这些问题,越来越多的卖家将目光投向了…

k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(四)之Helm及cert-manager安装

安装Helm(三台都安装) 下载helm安装包并加入执行目录 tar zxf helm-v3.2.4-linux-amd64.tar.gz cd linux-amd64 cp helm /usr/bin/ helm version添加rancher稳定版仓库(三台都安装) helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/serve…

8.2 新特性 - 透明的读写分离

文章目录 前言1. 安装部署1.1 下载安装包1.2 MySQL Shell1.3 配置 MySQL 实例1.4 启动 ReplicaSet1.5 启动 8.2 Router 2. 测试路由总结 前言 MySQL 8.0 官方推出过一个高可用方案 ReplicaSet 主要由 Router、MySQL Shell、MySQL Server 三个组件组成。 MySQL Shell 负责管理…

qt-双臂SCARA机器人动画

qt-双臂SCARA机器人动画 一、演示效果二、核心程序三、下载链接 在Qt opengl中完成的双臂SCARA机器人的简单模拟。 一、演示效果 二、核心程序 #include "glwidget.h"#include <GL/glu.h>GLWidget::GLWidget(QWidget *parent) :QGLWidget(parent),pitch(30.…

Java集合框架-1

目录 List集合 常见方法 迭代器&#xff08;Iterator&#xff09; List集合特有方法 List 的特点 创建 List 遍历List Java集合框架是Java编程语言提供的各种数据结构和算法的实现。它提供了不同类型的集合类&#xff0c;如列表(List)、集(Set)、映射(Map)等&#xff0c…

iOS通过p12导出公钥失败

通过p12文件导出证书crt文件一直报invalid password错误。 adminJiaozl Downloads % openssl pkcs12 -in ce.p12 -clcerts -nokeys -out MyCertificate.crt Enter Import Password: Mac verify error: invalid password?解决&#xff1a; 在 https://developer.apple.com/acc…

MongoDB文档插入

文章目录 MongoDB文档插入对比增删改查文档插入 MongoDB写安全机制非确认式写入 MongoDB文档查询参数说明查询操作符比较查询操作符逻辑查询操作符元素查询操作符数组查询操作符 模糊查询区别:$regex操作符中的option选项 MongoDB游标介绍游标函数手动迭代游标示例游标介绍 Mon…