• 反向代理的那些事


    背景:最近经常被小伙伴问道,有没有遇到过本地开发遇到接口代理报错的情况,或者是之前遇到本地没报错但线上测试环境接口报错404的情况。最终都是因为没有配置好反向代理导致的,所以这次也聊聊反向代理的那些事。

    正向代理与反向代理

    • 正向代理,以客户端为中心,也就是把服务器部署的服务,代理到服务器的特定域名、端口等底下,供客户端访问。

      (1)访问原来无法访问的资源,如google

      (2) 可以做缓存,加速访问资源

      (3)对客户端访问授权,上网进行认证

      (4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

    • 反向代理,以服务端为中心,则是把别人的接口代理到自己的服务器下,供自己使用。

    ​ (1)保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。

    (2)负载均衡,通过反向代理服务器来优化网站的负载

    为什么需要反向代理?

    • 前端浏览器同源策略,限制你的接口地址的域名,协议,端口要与前端的域名,协议,端口一致。这样就可以有效地防止csrf攻击,即当攻击者在你的网站,通过某种手段,请求他的接口地址,获取用户个人信息时,是会报跨域错误的。也就是你要请求服务端的接口,是需要有反向代理,才能保证不跨域。

    怎么做反向代理?

    截屏2020-11-05 下午1.29.38

    • 在request中, 新建符合在webpack或者nginx配置的正则的axios实例

      // utils/request
      export const RunChallengeAPI = new API({
        baseURL: '/api/activity',
      }).getInstance();
      
    • 在接口请求层service中使用axios实例

      // service/act.js
      import {RunChallengeAPI as API} from 'utils/request';
      
      
      export const checkApply = (config) => {
        console.log('config>>>', config);
        return API.get('/act/dt/checkApply', {...config})
      }
      

    本地开发环境的反向代理

    • 配置webpack

      在webpack中配置webpack-dev-server的devServer,其实这个就相当于nginx的配置的代理。

    // webpack.config.js
      devServer: {
        historyApiFallback: true,
        noInfo: true,
        // port: 80,
        https: config.openssl ? {
          key: duboConfig.https.key,
          cert: duboConfig.https.cert,
          ca: duboConfig.https.ca,
        } : false,
        // overlay: true,
        contentBase: resolve('.'),
        // open: true,
        hot: true,
        proxy: {
          '/api/activity': {
            target: 'http://xx.com',
            pathRewrite: { '^/api/activity': '', },
            secure: false,
            changeOrigin: true,
          },
        }
      },
    

    线上部署的反向代理

    • 在前端服务器中配置
        location /api/activity/ {
            rewrite ^/api/activity/(.*)$ /$1 break;
            proxy_pass http://topickol.dubbox.test.thejoyrun.com;
        }
    

    总结成一幅图:

    305504-20161112130135639-1005446770

  • 相关阅读:
    数据结构与算法部分习题题解
    Codeforces Round #372 +#373 部分题解
    KMP算法的正确性证明及一个小优化
    后记
    BZOJ 4089:[Sdoi2015]graft(SDOI 2015 Round 2 Day 2)
    BZOJ 4085:[Sdoi2015]bigyration(SDOI 2015 round 2 Day 1)
    使用 async await 封装微信小程序HTTP请求
    mongo创建数据库和用户
    把实体bean对象转换成DBObject工具类
    Trident整合MongoDB
  • 原文地址:https://www.cnblogs.com/Jomsou/p/13933622.html
Copyright © 2020-2023  润新知