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


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

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

    • 正向代理。是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
    • ​ 反向代理。是指以代理服务器来接受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 => {} // 在服务器启动前你可以做些自定义的中间件
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这个配置中:

    • 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': ''
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这个配置中,任何以 /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': ''
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这个配置中,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、安全设置等
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这个配置中:

    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;
    
    • 1
    • 2
    • 3
    • 4

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

    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 代理配置通常不会对打包后的项目产生负面影响。然而,在部署到生产环境之前,需要仔细检查和调整配置,以确保应用的正确性和安全性。

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

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

    在这里插入图片描述

  • 相关阅读:
    如何评估RPA需求?
    在 SDXL 上用 T2I-Adapter 实现高效可控的文生图
    java毕业设计我爱短视频管理系统mybatis+源码+调试部署+系统+数据库+lw
    深入分析APK文件格式
    Linux安装git和maven——拉取代码 --> mvn打包成jar包 --->运行jar包
    Python urllib, urllib2, urllib3 以及 requests 的区别 (附个人一些看法)
    【自动化测试】web自动化框架之四测试报告的搭建
    Eclipse+tomcat+MySQL搭建JavaWeb开发环境
    图解 SQL,这也太形象了吧
    Selenium4+Python3系列(六) - Selenium的三种等待,强制等待、隐式等待、显式等待
  • 原文地址:https://blog.csdn.net/sixpp/article/details/138059841