解决Vue项目部署到服务器之后前端向后端发送请求报错404的问题(centos使用docker实现nginx的反向代理)

news2025/3/18 19:33:25
场景重现:

由于现在流行前后端分离的部署方式,但是按照正确方法部署(如何部署可参考:)之后,发现明明前后端都部署好了并且运行成功,但是前端发送的请求都是404。明明在vue项目中配置了跨域的相关设置:

ps:本地配置跨域请参考:什么是跨域?如何解决跨域问题?-CSDN博客 

明明没问题,为什么就是发不过去呢,这是因为在本地环境下,这个配置是有效的,但是执行npm run build之后,并不会对这部分打包,也就是说即使你本地已经配置好了,但是打包好的dist文件里面并没有这部分,这就需要配置nginx,通过nginx代理到后端的端口。

话不多说,我们直接看如何操作。

开始解决:

首先我们检查nginx是否启动,输入:

docker ps

 

可以看到是正常启动的,然后我们进入容器内部:

docker exec -it nginx bash

注:nginx为你的容器名,也可以使用容器id,成功进去之后,显示容器id: 

如果显示一个类似于:is restarting的错误,反正就是没进来,提示有一个error,那就执行:(成功进来就不用管了,跳过就行)

docker stop nginx

docker start nginx

 重新启动容器就行,如果还是不行,那就是你的配置或者run命令出现了问题,直接stop容器,然后docker rmi nginx重新执行一遍run命令即可,本人的run命令如下,可作为参考:

  docker run -d -p 80:80 --name nginx  -v /home/nginx/dist:/usr/share/nginx/html --restart=always nginx

进来容器之后,我们进入配置文件目录:

cd /etc/nginx

可以看到,里面就有nginx.conf,不过我们的目标不在这里,而是前面的conf.d,不过我们也可以看一下nginx.conf里面是什么:

ps:如果是第一次进入容器,需要先执行下面两条命令下载vim编辑器

apt-get update

apt-get install vim 

下载完成(下载会比较慢,不用着急,下载过程大概需要五分钟左右)之后直接输入:

vi nginx.conf 

回车进入配置文件: 

其实你可以看到,他关于server的设置都是在conf.d下的*/conf文件中

然后我们按下键盘的esc键,输入:wq退出即可(包括冒号)。然后我们进入conf.d中

可以看到只有一个文件,我们输入:

vi default.conf

 进入配置文件

你们进来是没有红框里面的内容的,这也是需要加进来的配置:

location /api/ {

         proxy_pass  http://localhost:8080/;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
}

 切记把api替换成你前端代理的地址(一般人都是api),然后把localhost换成你服务器的地址,尽量不要用localhost。

location在监听到前端发送请求之后,如果你的路径中带有api,就会自动转发到你指定的地址,这样就实现了nginx的反向代理,同时,你也可以实现多端的发送,可以设置多个location,可以代理到多个后端接口。设置完成之后保存退出即可,按下esc,输入:wq(包含冒号)。重启nginx即可:

docker restart nginx

查看是否启动成功:

docker ps 

总结&可能出现的错误

最后,修改配置文件的时候注意一定要细心,比如 location /api/,location后面是有空格的,最后面的/不要丢掉,服务器路径后面的/也不要丢掉,后面的分号也必须要有,分号(;)代表语句的结束,没有分号就会连着执行两条语句,就会报错。

最后的最后,我们来分析并解决一下你可能会出现的问题,或者已经出现了的问题。

首先就是最后重启nginx之后,发现输入docker ps发现没有nginx,然后输入docker ps -a,发现有nginx这个容器,但是没有端口。这时候可以输入:

docker logs nginx

 查看nginx的启动日志,你发现最下面报了好几个error,针对不同的错误去做不同的解决方式,但是,由于你只进行了本文的conf配置文件配置修改,那就是说只有一个原因:你的配置文件写错了。由于你的nginx启动不了,你也没有办法进入容器重新查看配置文件,你只能docker rmi nignx,然后重新执行一遍run命令。然后重新配置一遍,这次一定要检查好有没有输错,缩进分号有没有按照要求来。

如果是ps发现跑起来了,但是没有端口,那就是端口被占用了或者是其他一些原因了,这个很容易解决,端口被占用,kill掉就可以,其他原因大概率也是nginx本身的原因,看一下是不是你的run命令写错了,stop掉然后rmi之后重新run一遍吧。

最后就是挂载的问题,我建议把nginx的html挂载到主目录的某个文件下,但是不建议挂载配置文件,第一是我认为配置文件一般只需要配置一次即可,特别是服务器上的,第二是如果挂载文件和被挂载文件不同的话,是有一定可能出现问题的,第三也是为了安全性,还是让他就在容器里面呆着吧。

作为一个加起来只有七个月开发时间的全栈工程师,还没入门,不过好像依稀已经可以看得到远方的门槛了,我还有很长的路要走,本文也是我的一点经验,文章略显稚嫩,希望各路大神可以指点一二,也预祝大家从此没有bug,在全栈和架构师的道路上越走越远!

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

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

相关文章

信息系统项目管理师十大管理计划内容概览

目录 1.项目章程2.项目管理计划3.范围管理计划4.需求管理计划5.进度管理计划6.成本管理计划7.质量管理计划8.资源管理计划9.沟通管理计划10.风险管理计划11.采购管理计划12.干系人参与计划 点我去AIGIS公众号查看本文 1.项目章程 项目目标成功标准退出标准关键干系人名单发起人…

SpringCloud系列(23)--手写实现负载轮询算法

前言:在上一篇文章中我们介绍了关于负载轮询算法的原理以及看了源代码,而本章节内容则是着重于我们自己手写一个负载轮询算法 1、分别编写provider-payment8001、provider-payment8002这两个子项目的PaymentController类,增加一个/payment/lb…

手把手教你解决 Hive 的数据倾斜

文章目录 数据倾斜是什么?产生数据倾斜的场景1.空值引发的数据倾斜2.不可拆分的大文件产生的数据倾斜3.数值膨胀引发的数据倾斜4.不同数据类型引发的数据倾斜5.Count(distinct) 引发的数据倾斜6.表 Join 操作时引发数据倾斜7.group by 引发的数据倾斜 解决数据倾斜数…

什么是SSL证书?如何选择SSL证书?

在浏览网站的时候,你会不会有这样一些疑问。 为什么有的网站是http://开头,有的却是https://?它们有什么区别吗? 经常访问的网站,浏览器突然提示“安全证书过期”,提醒你不要浏览该网址? 这一切…

推荐一款自助分析的财务分析软件:奥威BI软件

奥威BI软件是一款支持多维度动态自助分析的软件,预设了智能财务分析方案,提供内存行列计算模型解决财务指标计算难题,界面简洁,以点击、拖曳操作为主,十分适合没有IT背景的财务人做财务分析。因此也经常有人说奥威BI软…

前后端开发入门全攻略:零基础学起

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、前后端开发概览 二、后端开发基础:Flask框架入门 代码案例:Hel…

驱动执行报“Attribute var: Invalid permissions 0665”

问题:执行驱动的时候会报下面这个错误 WARNING: CPU: 0 PID: 123 at fs/sysfs/group.c:61 internal_create_group0x170/0x264() Attribute var: Invalid permissions 0665 问题分析:查看 fs/sysfs/group.c:61的代码,发现是我设置 module_par…

Filter和Interceptor

会话 cookie 服务器自动将cookie响应给浏览器 浏览器接收响应回来的数据 自动将cookie存储在本地, 后续请求当中浏览器将cookie携带到服务器 cookie不能跨域,存储在客户端 session 存储在服务器 token------>JWT 存储在客户端, 服务…

独享IP是原生IP吗?二者有何区别?

原生IP: 原生IP是指由Internet服务提供商(ISP)直接分配给用户的IP地址,这些IP地址通常反映了用户的实际地理位置和网络连接。原生IP是用户在其所在地区或国家使用的真实IP地址,与用户的物理位置直接相关。在跨境电商中…

统计信息和AUTO SQL TUNING任务重合引发的Library Cache Lock血案

一、引言 行里的短信平台,在晚上22:00的时候,突然出现卡顿,卡顿持续1分钟左右,这1分钟内,短信超过30秒才发送成功。因此,对数据库层面开展了一些分析,并且发现了些问题。 二、分析过程 1.查看…

从 0 实现一个文件搜索工具 (Java 项目)

背景 各文件系统下, 都有提供文件查找的功能, 但是一般而言搜索速度很慢 本项目仿照 everything 工具, 实现本地文件的快速搜索 实现功能 选择指定本地目录, 根据输入的信息, 进行搜索, 显示指定目录下的匹配文件信息文件夹包含中文时, 支持汉语拼音搜索 (全拼 / 首字母匹配…

CSS伪类实现input聚焦时,上层div样式改变

CSS伪类实现input聚焦时,上层div样式改变 可以使用:focus-within伪类选择器,它会在div内的任何元素获得焦点时选择该div,明确的是,获得焦点和被点击是不相等的,div能被点击,但是不能获得焦点,也…

ViT:1 从DETR说起

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调重新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技…

东哥一句兄弟,你还当真了?

关注卢松松,会经常给你分享一些我的经验和观点。 你还真把自己当刘强东兄弟了?谁跟你是兄弟了?你在国外的房子又不给我住,你出去旅游也不带上我!都成人年了,东哥一句客套话,别当真! 今天,东哥在高管会上直言&…

存储+调优:存储-IP-SAN-EXTENSION

存储调优:存储-IP-SAN-EXTENSION 文件系统的锁标记 GFS(锁表空间) ----------- ------------ ------------- 节点 | ndoe1 | | node2 | | node3 | ---------- ------…

C++成员函数 - 析构函数

析构函数 析构函数 是特殊的成员函数,其 特征 如下: 1. 析构函数名是在类名前加上字符 ~ 。 2. 无参数无返回值类型。 3. 一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。注意:析构函数不能重 载 …

K8S认证|CKA题库+答案| 17. 节点维护

17、节点维护 CKA v1.29.0模拟系统免费下载试用: 百度网盘:https://pan.baidu.com/s/1vVR_AK6MVK2Jrz0n0R2GoQ?pwdwbki 题目: 您必须在以下Cluster/Node上完成此考题: Cluster Ma…

图论(三)(最小生成树)

一、图的表示(简要概述) 对于图G(V,E)( V 为节点的集合,E 为边的集合 V*V 的子集)有两种表示方法:邻接链表和邻接矩阵,两种表示方法既可以表示有向图&#x…

输入输出(3)——C++的标准输入流

目录 一、cin 流 二、成员函数 get 获取一个字符 (一)无参数的get函数。 (二)有一个参数的get函数。 (三)有3个参数的get函数 (四)用成员函数 getline 函数读取一行字符 (五)用成员函数 read 读取一串字符 (六)istream 类…

[机缘参悟-187] - 《道家-水木然人间清醒1》读书笔记 - 真相本质 -10- 关系界限 - 一个人只有放下自我,才能看清世界的真相

目录 一、现实生活中,每个人都是盲人摸象 二、一个人认知的本质是神经网络的模型训练 三、每个人的认知具有局限 四、放下自我,就是跳出自我的认知局限 五、站在上帝的视角,俯瞰不同众生的千差万别的大脑认知系统 六、个体的独特性&…