Vue学习:webpack-dev-server和nginx问答

news2024/11/12 13:15:23

正向代理和反向代理的概念

正向代理和反向代理的概念如下:

  • 正向代理。是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
  • ​ 反向代理。是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

vue 配置webpack-dev-server详细解释

在这里插入图片描述

vue 项目中,webpack-dev-server 是开发时使用的服务器,它可以提供一个HTTP服务器,并且会自动热重载你的代码更改。

在 vue 项目中配置 webpack-dev-server 通常是通过 vue.config.js 文件来完成的。以下是一个配置示例:

// vue.config.js
module.exports = {
  devServer: {
    open: true, // 自动打开浏览器
    host: 'localhost', // 服务器的IP地址
    port: 8080, // 服务器端口
    https: false, // 是否使用https
    hotOnly: false, // 是否开启热重载
    proxy: { // 设置代理
      '/api': {
        target: 'http://target-server.com',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    },
    before: app => {} // 在服务器启动前你可以做些自定义的中间件
  }
}

在这个配置中:

  • open 设置为 true 时,项目运行时会自动打开浏览器窗口。
  • host 和 port 分别设置服务器的IP地址和端口号。
  • https 设置为 true 时,服务器会使用 https 协议。
  • hotOnly 设置为 true 时,热重载功能开启,不会刷新整个页面。
  • proxy 可以设置代理服务器,将对应路径的请求转发到目标服务器。
  • before 可以注册自定义中间件。

要使这些配置生效,你需要确保 vue.config.js 文件在项目的根目录中,并且 webpack-dev-server 是通过 vue-cli-service serve 命令启动的。

changeOrigin配置的含义

在 webpack-dev-server 的代理配置中,changeOrigin 是一个重要的选项,它决定了在代理请求时是否应该改变请求头的 Origin 属性。

默认情况下,changeOrigin 是 false。这意味着在代理请求中,Origin 属性将保持不变,通常是开发服务器的地址(例如 http://localhost:8080)。这在大多数情况下是可行的,但如果你的后端服务器对请求的 Origin 属性有严格的检查,或者你需要代理到不同的域,那么你就需要设置 changeOrigin 为 true。

当 changeOrigin 设置为 true 时,webpack-dev-server 会在代理请求中修改 Origin 属性,使其看起来像是从目标服务器(target)发出的。这通常在处理跨域请求时非常有用,特别是当你的前端和后端不在同一个域下时。

例如,假设你有以下的代理配置:

javascript
proxy: {
  '/api': {
    target: 'https://api.example.com',
    changeOrigin: true,
    pathRewrite: {
      '^/api': ''
    }
  }
}

在这个配置中,任何以 /api 开头的请求都会被代理到 https://api.example.com。当 changeOrigin 设置为 true 时,如果原始请求中的 Origin 是 http://localhost:8080,那么在代理请求中,Origin 会被修改为 https://api.example.com。

这样做的好处是,如果后端服务器检查 Origin 头部以确保请求来自预期的源,那么代理请求将不会被拒绝。同时,pathRewrite 选项用于重写请求路径,将 /api 前缀去除,以便后端服务器可以正确解析路径。

changeOrigin 在 webpack-dev-server 的代理配置中是一个重要的选项,用于处理跨域请求和确保代理请求被后端服务器正确接收。

pathRewrite配置的含义

在 webpack-dev-server 的代理配置中,pathRewrite 是一个用于重写请求路径的选项。这在你想要修改被代理请求的URL路径时非常有用。

pathRewrite 是一个对象,其中的键是原始路径的匹配模式,值是你想要替换成的路径。通常,这些模式都是正则表达式,用于匹配URL中的特定部分。

以下是一个使用 pathRewrite 的例子,这个例子来自于上面的配置片段:

proxy: {
  '/api': {
    target: 'http://example.com',
    changeOrigin: true,
    pathRewrite: {
      '^/api': ''
    }
  }
}

在这个配置中,pathRewrite 的目的是重写所有以 /api 开头的请求路径。正则表达式 ‘^/api’ 匹配以 /api 开头的路径,而空字符串 ‘’ 表示将匹配到的部分替换为空,即移除 /api。

这意味着,如果你发送一个请求到 http://localhost:8080/api/users,代理会将这个请求转发到 http://example.com/users(注意 /api 部分被移除了)。

这种重写通常用于将前端应用程序中的URL结构与后端API的URL结构相匹配。例如,如果前端应用程序的所有API请求都以 /api 开头,而实际的后端API并不需要这个前缀,那么就可以使用 pathRewrite 来移除它。

需要注意的是,pathRewrite 的配置应该根据你的实际后端API路径和你想要的前端请求路径来设置。上面的例子只是一个通用的示例,你需要根据你的项目需求来定制它。

发布nginx相应配置

在这里插入图片描述

发布后的 nginx 配置与 webpack-dev-server 的配置是两个不同的概念。webpack-dev-server 主要用于开发环境的热重载和代理设置,而 nginx 则是一个生产环境的web服务器,用于托管和提供静态资源、代理请求等。

当你从开发环境切换到生产环境时,你需要确保你的应用已经通过 webpack 打包成了静态资源(如 JavaScript、CSS、图片等),并且这些资源已经部署到了服务器上。nginx 的任务就是提供这些静态资源,并且可能需要处理一些请求转发或反向代理。

以下是一个基本的 nginx 配置示例,用于托管一个静态的前端应用:

server {
    listen 80;
    server_name your-domain.com;

    root /path/to/your/dist; # 指向你的打包后的静态资源目录
    index index.html;
    
    location / {
        try_files $uri $uri/ /index.html; # 尝试直接提供文件,否则回退到index.html
    }
    
    # 如果你的应用需要和后端API通信,你可以设置反向代理
    location /api {
        proxy_pass http://backend-server-address; # 后端服务器的地址
        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;
    }
    
    # 其他配置,如SSL、安全设置等

}

在这个配置中:

root 指令设置了静态文件的根目录。
location / 定义了如何响应来自 / 的请求。try_files 指令尝试按照顺序提供请求的文件,如果文件不存在,则回退到 index.html。这对于单页应用(SPA)来说非常重要,因为所有路由通常都会回退到 index.html。
location /api 定义了一个反向代理,将所有以 /api 开头的请求转发到后端服务器。你需要将 http://backend-server-address 替换成你后端服务器的实际地址。

请确保替换 your-domain.com 和 /path/to/your/dist 为你的实际域名和打包后的静态资源目录。

最后,不要忘记在 nginx 配置文件中添加 SSL 配置(如果需要使用 HTTPS),并重启 nginx 服务使配置生效。

SSL 配置示例

ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;

listen 443 ssl;

再次强调,生产环境的配置通常比开发环境复杂得多,并且需要根据你的具体需求进行调整。

webpack-dev-server 对项目打包的影响

在开发环境中使用 webpack-dev-server 并配置 API 代理主要是为了提供开发过程中的便利,如模拟后端响应、自动刷新等。这些配置通常不会影响最终的打包结果。然而,有几点需要注意:

开发环境与生产环境的差异:webpack-dev-server 提供的特性(如热重载、自动刷新等)仅在开发环境中有效。当项目打包后,这些特性将不再存在。因此,开发环境中的 API 代理配置也不会被包含在生产环境的打包结果中。

API 代理的移除:如果你在开发环境中使用了 API 代理来模拟后端响应,那么在打包部署到生产环境时,这些代理配置应该被移除。生产环境应该直接与真实的后端服务器通信。

安全性考虑:在开发环境中,为了方便开发,可能会配置一些不安全的 API 代理规则(例如,不验证 SSL 证书等)。这些规则在生产环境中应该被严格避免,以确保应用的安全性。

路由和路径问题:如果在开发环境中使用了路径重写等特性来修改 API 请求的路径,需要确保在生产环境中这些修改不会造成问题。例如,如果开发环境中将 /api 前缀重写为空,生产环境中也应该保持相同的路径结构。

依赖管理:确保在 package.json 文件中正确管理了所有依赖,包括 webpack 和 webpack-dev-server。这样,在打包部署时,所有必要的依赖都会被正确包含。

总之,只要正确配置和管理,开发环境中的 webpack-dev-server 和 API 代理配置通常不会对打包后的项目产生负面影响。然而,在部署到生产环境之前,需要仔细检查和调整配置,以确保应用的正确性和安全性。

关注我,不迷路,共学习,同进步

关注我,不迷路,共学习,同进步

在这里插入图片描述

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

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

相关文章

苹果电脑装虚拟机好用吗 苹果电脑装虚拟机要钱吗 Parallels对mac的损害 Parallels占用多大空间 PD19

在当今数字化的时代,人们对电脑系统跨设备互联的需求越来越高。作为拥有广泛用户群体的苹果电脑,许多用户会有在Mac系统中运行其他操作系统的需求。在这种情况下,安装虚拟机是一个较好的解决方案。那么接下来就给大家介绍苹果电脑装虚拟机好用…

对接支付宝支付

前言 这里讨论的主要是一个验签出错的问题,至于具体的对接流程并不复杂,直接找官网的文档就行了 问题表现 后台拉起支付后要返回一个form表单给前端,然后前端说报了这个错,于是进行一系列排查 猜测1 很明显的就会怀疑支付宝的公钥或者私钥出了问题才引起这个问题,但是对比了以…

苍穹外卖day10(2)WebSocket、来单提醒、客户催单

文章目录 前言一、WebSocket1. 概述2. HTTP协议和WebSocket协议对比3. 实现步骤 二、来单提醒1. 业务规则2. 接口设计3. 代码实现 三、客户催单1. 业务规则2. 接口设计3. 代码实现 前言 websocket支持双向通信,通常用于数据实时更新。本项目中用于来单提醒和客户催…

在 Linux 上把 Vim 配置为默认编辑器

目录 ⛳️推荐 在 Linux 命令行中编辑 将 Vim 设置为其他程序的默认值 在 Alpine 中编辑电子邮件 总结 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 我使用 Linux 大概有…

深入docker-swarm overlay网络模型

目录 1.简介 2.网络模型 3.docker_gwbridge网络 3.1.docker_gwbridge网关地址 3.2.检查docker_gwbridge网络 3.2.1.查找任务容器eth接口 3.2.2.查找ingress-sbox容器eth接口 4.检查ingress网络 4.1.检查ingress网络 4.2.检查ingress网络的命名空间 4.2.1.查找任务容…

Linux查看僵尸进程

1、查看系统是否有僵尸进程 使用Top命令查找,当zombie前的数量不为0时,即系统内存在相应数量的僵尸进程。 2、定位僵尸进程 使用命令ps -A -ostat,ppid,pid,cmd |grep -e ‘^[Zz]’定位僵尸进程以及该僵尸进程的父进程。 3、杀死僵尸进程 使用Kill -…

深入了解直播美颜工具与视频美颜SDK的实现与优化策略

今天,小编将为大家详解视频美颜SDK技术的视线方案与优化策略。 一、美颜工具的实现原理 利用特征提取算法提取人脸的各种特征,如皮肤色调、眼睛大小等。接下来,根据用户设定的美颜参数,对提取的特征进行修改。最后,将…

Unet网络架构讲解(从零到一,逐行编写并重点讲解数据维度变化)

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️感谢大家点赞👍&…

【bug】使用mmsegmentaion遇到的问题

利用mmsegmentaion跑自定义数据集时的bug处理(使用bisenetV2) 1. ValueError: val_dataloader, val_cfg, and val_evaluator should be either all None or not None, but got val_dataloader{batch_size: 1, num_workers: 4}, val_cfg{type: ValLoop}, …

Mysql 在Windows Server系统下修改数据文件存储路径遇到的坑

因项目需要搭建一个Mysql数据库,为了方便日常运维操作开始选择了Windows Server 2012R2(已有的虚拟机),考滤到要300G空间,原来的盘空间不够了,就是给虚拟机加了磁盘,Mysql 8.0.26社区版安装路径没得选择,默认就装在C&a…

OpenHarmony开发实例:【 待办事项TodoList】

简介 TodoList应用是基于OpenHarmony SDK开发的安装在润和HiSpark Taurus AI Camera(Hi3516d)开发板标准系统上的应用;应用主要功能是以列表的形式,展示需要完成的日程;通过本demo可以学习到 JS UI 框架List使用; 运行效果 样例…

记一次 Vscode + Latex 正向/反向搜索忽然失效

遥望大半个月前,完成论文撰写后,这些天虽然多次打开项目,但我真的一个字都没动过,今天想着开始着手修改一下,打开项目发现正向/反向搜索忽然失效了,感觉浑身有蚂蚁在爬,思索再三后找到问题&…

端口被占用的解决方案汇总

端口被占用的解决方案汇总 【一】windows系统端口被占用【二】Linux系统端口被占用【三】Linux的ps命令查找(1)ps命令常用的方式有三种(2)ps -ef |grep 8080 【一】windows系统端口被占用 (1)键盘上按住Wi…

javaEE初阶——多线程(八)——常见的锁策略 以及 CAS机制

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 小比特 大梦想 此篇文章与大家分享分治算法关于多线程进阶的章节——关于常见的锁策略以及CAS机制 如果有不足的或者错误的请您指出! 多线程进阶 1.常见的锁策略 我们需要了解的是,我们使用是锁,在加锁 / 解锁…

【软考】UML中的关系

目录 1. 说明2. 依赖3. 关联4. 泛化5. 实现 1. 说明 1.UML中有4种关系:依赖、关联、泛化和实现2.这 4种关系是 UML,模型中可以包含的基本关系事物。它们也有变体,例如,依赖的变体有精化、跟踪、包含和延伸 2. 依赖 1.依赖(Dependency)。2.…

文心一言 VS 讯飞星火 VS chatgpt (242)-- 算法导论17.4 1题

一、假定我们希望实现一个动态的开地址散列表。为什么我们需要当装载因子达到一个严格小于 1 的值 a 时就认为表满?简要描述如何为动态开地址散列表设计一个插入算法,使得每个插入操作的摊还代价的期望值为 O(1) 。为什么每个插入操作的实际代价的期望值…

Excel如何计算时间差

HOUR(B1-A1)&"小时 "&MINUTE(B1-A1)&"分钟 "&SECOND(B1-A1)&"秒"

下级平台级联EasyCVR视频汇聚安防监控平台后,设备显示层级并存在重复的原因排查和解决

视频汇聚平台/视频监控系统/国标GB28181协议EasyCVR安防平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,平台支持7*24小时实时高清视频监控,能同时…

机器学习-10-基于paddle实现神经网络

文章目录 总结参考本门课程的目标机器学习定义第一步:数据准备第二步:定义网络第三步:训练网络第四步:测试训练好的网络 总结 本系列是机器学习课程的系列课程,主要介绍基于paddle实现神经网络。 参考 MNIST 训练_副…

深入剖析机器学习领域的璀璨明珠——支持向量机算法

在机器学习的广袤星空中,支持向量机(Support Vector Machine,简称SVM)无疑是一颗璀璨的明珠。它以其独特的分类能力和强大的泛化性能,在数据分类、模式识别、回归分析等领域大放异彩。本文将详细剖析SVM算法的原理、特…