若依前端挂Nginx、打包部署运行!!!!

news2024/12/28 2:29:08

先了解知识:

const proxy = require('http-proxy-middleware');

module.exports = {   
	devServer:{
	    host: 'localhost', //target host
	    port: 8080,
	    //proxy:{'/api':{}},代理器中设置/api,项目中请求路径为/api的替换为target
	    proxy:{
	        '/api':{
	            target: 'http://192.168.1.30:8085',//代理地址,这里设置的地址会代替axios中设置的baseURL
	            changeOrigin: true,// 如果接口跨域,需要进行这个参数配置
	            //ws: true, // proxy websockets
	            //pathRewrite方法重写url
	            pathRewrite: {
	                '^/api': '/' 
	                //pathRewrite: {'^/api': '/'} 重写之后url为 http://192.168.1.16:8085/xxxx
	                //pathRewrite: {'^/api': '/api'} 重写之后url为 http://192.168.1.16:8085/api/xxxx
	           }
	    }}
	},
	//...
}

网上找的一个:

我来解释一下,了解大概意思即可:

1、前端服务运行在 localhost:8080

2、目标服务器是 http://192.168.1.30:8085,这就是你的后端服务器地址。

3、前端请求 localhost:8080/api/queryOrder,希望这个请求被转发到后端服务器 http://192.168.1.30:8085/queryOrder

4、配置了 pathRewrite 规则,将 /api 前缀重写为空,发送给后端请求时去掉 /api 部分。

【/api': {},就是告诉node, 我接口只要是’/api’开头的才用代理】

1. 前端请求发起:

假设你的前端项目中使用 axios 来发送请求,代码可能是这样的:

import axios from 'axios';

axios.get('/api/data')  // 请求地址是 /api/data
  .then(response => {
    console.log('Response:', response.data);
  })
  .catch(error => {
    console.log('Error:', error);
  });

在前端,axios.get('/api/data') 会发出一个请求,浏览器会尝试向 http://localhost:8080/api/data 发送请求。

2. webpack-dev-server 配置代理:

在你的 webpack.config.jsvue.config.js 文件中,你配置了 proxy 代理规则:

const proxy = require('http-proxy-middleware');

module.exports = {   
  devServer: {
    host: 'localhost', // 目标主机,前端服务运行的主机
    port: 8080, // 本地开发服务器的端口
    proxy: {
      '/api': {  // 以 /api 开头的请求都会通过代理
        target: 'http://192.168.1.30:8085',  // 代理到这个后端服务
        changeOrigin: true, // 如果后端 API 需要跨域,可以设置为 true
        pathRewrite: {
          '^/api': '/'  // 重写路径,将请求的 /api 去掉,发给后端的 URL 为 http://192.168.1.30:8085/data
        }
      }
    }
  },
};
3. 请求流程:
  1. 前端请求:浏览器向 http://localhost:8080/api/data 发送请求。

    这里 axios.get('/api/data') 会被 webpack-dev-server 捕获,因为它匹配到了 /api 前缀。

  2. 代理转发webpack-dev-server 根据 proxy 配置,将请求代理到目标地址 http://192.168.1.30:8085

    • 由于配置了 pathRewrite: {'^/api': '/'},请求路径 /api/data 会被重写成 /data,最终请求的地址是 http://192.168.1.30:8085/data
  3. 后端处理http://192.168.1.30:8085 这个后端服务会接收到请求并进行处理,返回响应数据。

  4. 响应返回:后端返回的数据会通过代理服务器 webpack-dev-server 转发回浏览器,前端页面就可以接收到响应数据。

4. 请求示例:

前端请求:http://localhost:8080/api/data
这会被 webpack-dev-server 转发到:http://192.168.1.30:8085/data
最终的后端 URL 为:http://192.168.1.30:8085/data

5. Nginx 代理:

假设你有一个生产环境的 Nginx 配置,想要将前端请求代理到后端服务,Nginx 配置可能是这样的:

server {
  listen 70;

  # 假设前端文件存放路径
  root /usr/share/nginx/html;
  index index.html;

  location / {
    try_files $uri $uri/ /index.html;
  }

  # 代理 /api 请求到后端服务
  location /api/ {
    proxy_pass http://192.168.1.30:8085/;  # 将请求代理到后端
    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;
  }
}
  • listen 告诉 Nginx 监听哪个端口。

  • listen 70; 中,70 表示 Nginx 监听的端口号。通常这个端口号应该和前端(比如 Vue.js 开发环境中的 Webpack Dev Server)的端口一致,特别是当你想要通过 Nginx 代理或转发请求时。

  • 前端的请求仍然是 http://localhost:8080/api/data,这会被 webpack-dev-server 转发到后端。

  • 如果你使用 Nginx 进行生产环境部署,那么 Nginx 会把 /api 请求转发到后端服务 http://192.168.1.30:8085/

前端生产环境(nginx代理)和开发环境是否冲突-CSDN博客

nginx服务器的端口号是80,所以启动成功之后,我们浏览器直接访问http://localhost:80 即 可,其中80端口可以省略,其浏览器展示效果如图所示

【首先nginx占用端口80,若依前端默认80改为70,】

总结:
  • 开发环境:在开发环境中,你通过 webpack-dev-server 配置的代理将 /api 的请求转发到目标后端服务。
  • 生产环境:你可以在 Nginx 中配置类似的代理规则,将前端请求代理到后端服务。

前端部署
打开前端项目的vue.config.js文件,

检查devServer下的proxy代理部分,然后将下面这个端口修改为你要在打包后访问的端口,即使用nginx代理前的接口。这个端口默认是80端口,这里把其修改为不会冲突的70端口,不推荐使用80端口。
因为80端口是默认端口在部署到服务器上和下面启动nginx可能存在占用等问题。
除了这个70端口外,下面的target的url和端口要和你服务器上能访问到后台的接口一致。

npm run build:prod

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

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

相关文章

Vue CLI 3 项目构建

Vue CLI 是一个功能强大、易于使用的工具,可以极大地简化 Vue.js 应用的开发过程。通过快速创建项目、灵活的插件系统和丰富的配置选项,开发者可以更专注于业务逻辑,而不是底层配置。无论是新手还是经验丰富的开发者,Vue CLI 都是…

电脑提示报错NetLoad.dll文件丢失或损坏?是什么原因?

一、NetLoad.dll文件丢失或损坏的根源 程序安装不完整:某些程序在安装过程中可能因为磁盘错误、网络中断或安装程序本身的缺陷,导致NetLoad.dll文件未能正确安装或复制。 恶意软件攻击:病毒、木马等恶意软件可能会篡改或删除系统文件&#x…

SpringBoot(二)—— yaml配置文件

接上篇,我们对SpringBoot有了基本的了解,接下来探究配置文件。 目录 二、配置文件 1. SpringBoot热部署 2. 配置文件 2.1 配置文件的作用 2.2 YAML 配置文件 2.3 YAML 与 XML 比较 3. YAML语法 3.1 键值对 3.2 值的写法 3.3 对象/Map&#x…

基于PyQt5的UI界面开发——多界面切换

介绍 最初,因为课设的缘故,我只是想做一个通过按键进行切面切换而已,但是我看网上资料里面仅是语焉不详,让我困惑的很,但后面我通过摸索才发现这件事实在是太简单了,因此我想要记录下来。 本博客将介绍如…

Virtualbox硬盘扩容

前言 有没有使用虚拟机安装操作系统的时候,虚拟硬盘一开始分配的虚拟硬盘空间不够用?在后期去扩容的伙伴们,下面我看看如何扩容virtualbox的虚拟硬盘? 重新分配虚拟硬盘大小 在virtualbox菜单选择【管理】-【工具】-【虚拟介质…

如何实现 MySQL 的读写分离?

面试题 你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题? 面试官心理分析 高并发这个阶段,肯定是需要做读写分离的,啥意思&#x…

路由器的原理

✍作者:柒烨带你飞 💪格言:生活的情况越艰难,我越感到自己更坚强;我这个人走得很慢,但我从不后退。 📜系列专栏:网路安全入门系列 目录 路由器的原理一,路由器基础及相关…

学习C++:标识符命名规则

标识符命名规则: 作用:C规定给标识符(变量、常量)命名时,有一套自己的规则 标识符不能是关键字 标识符只能由字母、数字、下划线组成 第一个字符必须为字母或下划线 标识符中字母区分大小写 (给标识符命…

Git如何设置和修改当前分支跟踪的上游分支

目录 前言 背景 设置当前分支跟踪的上游分支 当前分支已有关联,删除其关联,重新设置上游 常用的分支操作 参考资料 前言 仅做学习记录,侵删 背景 在项目开发过程中,从master新建分支时,会出现没有追踪的上游分…

【数据科学导论】第一二章·大数据与数据表示与存储

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀数据处理与分析_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言…

LeetCode - Google 校招100题 第8天 图(Graph) (2题)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144744820 LeetCode 合计最常见的 112 题: 校招100题 第1天 链表(List) (19题)校招100题 第2天 树(Tree) (21题)校招100题 第3天 动态规划(DP) (20题)

五分钟学会如何在GitHub上自动化部署个人博客(hugo框架 + stack主题)

上一篇文章: 10分钟学会免费搭建个人博客(Hugo框架 stack主题) 前言 首先,想要实现这个功能的小伙伴需要完成几个前置条件: 有一个GitHub账号安装了git,并可以通过git推送commit到GitHub上完成第一篇文章…

kubernetes Gateway API-部署和基础配置

文章目录 1 部署2 最简单的 Gateway3 基于主机名和请求头4 重定向 Redirects4.1 HTTP-to-HTTPS 重定向4.2 路径重定向4.2.1 ReplaceFullPath 替换完整路径4.2.2 ReplacePrefixMatch 替换路径前缀5 重写 Rewrites5.1 重写 主机名5.2 重写 路径5.2.1 重新完整路径5.2.1 重新部分路…

操作002:HelloWorld

文章目录 操作002:HelloWorld一、目标二、具体操作1、创建Java工程①消息发送端(生产者)②消息接收端(消费者)③添加依赖 2、发送消息①Java代码②查看效果 3、接收消息①Java代码②控制台打印③查看后台管理界面 操作…

使 el-input 内部的内容紧贴左边

<el-inputv-model"form.invitor"placeholder"PC端的自动取当前账号的手机号"readonlyclass"no-border-input" />::v-deep(.no-border-input .el-input__inner) { border: none; box-shadow: none; padding-left: 0; /* 确保内容紧贴左边 *…

服务器分区与挂载(新手友好)

本文为实习期间项目实施心得分享在此供各位实习生使用 安装Centos7.9 1>这里选择上面的安装Centos7 2>回车后,等待到这个画面.选择你的语言 3>时区和语言自己按需选择 4>我们本次采取最小化安装只需要改这两个地方 1>选择INSTALLATION DESTINATION 这一步进行…

Docker-构建自己的Web-Linux系统-镜像webtop:ubuntu-kde

介绍 安装自己的linux-server,可以作为学习使用&#xff0c;web方式访问&#xff0c;基于ubuntu构建开源项目 https://github.com/linuxserver/docker-webtop安装 docker run -d -p 1336:3000 -e PASSWORD123456 --name webtop lscr.io/linuxserver/webtop:ubuntu-kde登录 …

spring专题笔记(六):bean的自动装配(自动化注入)-根据名字进行自动装配、根据类型进行自动装配。代码演示,通俗易懂。

目录 一、根据名字进行自动装配--byName 二、根据类型进行自动装配 byType 本文章主要是介绍spring的自动装配机制&#xff0c; 用代码演示spring如何根据名字进行自动装配、如何根据类型进行自动装配。代码演示&#xff0c;通俗易懂。 一、根据名字进行自动装配--byName Us…

深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223

深入探讨 Go 中的高级表单验证与翻译&#xff1a;Gin 与 Validator 的实践之道 在现代后端开发中&#xff0c;表单验证是保证数据完整性和服务稳定性的核心环节。如何优雅、高效地实现表单验证&#xff0c;同时提供人性化的错误提示&#xff0c;是每位开发者的必修课。在本文中…

UE5 渲染管线 学习笔记

兰伯特 SSS为散射的意思 带Bias的可以根据距离自动切换mip的卷积值 而带Level的值mipmaps的定值 #define A8_SAMPLE_MASK .a 这样应该就很好理解了 这个只采样a通道 带Level的参考上面的 朝左上和右下进行模糊 带Bias参考上面 随机数 4D 3D 2D 1D HLSL内置UV HLSL内置鼠标坐…