vite+vue3+ts项目上线docker 配置反向代理API

news2024/9/22 19:43:25

这次重点的坑是反向代理。

1。项目中配置代理,为了跨域请求数据

项目根目录中新建vite.config.ts文件

在文件中添加配置代理

注意:其中 '/api' 和target 的地址后面没有 '/'

2。在项目根目录中新建Httprequest.ts文件,引入axios,并封装请求 引入axios就不多说了,npm自行安装就好

import axios from 'axios';
import {
  LicId,
  FrontCode,  
  getTime,
  WxAppId
} from './utils/index';
import {
  getToken
} from './utils/token';


// 创建一个axios实例
const instance = axios.create({
  baseURL: '/api', // 设置请求的基础URL
  timeout: 5000, // 设置请求超时时间
});


// 请求拦截器
instance.interceptors.request.use(
  async (config) => {
   
  // 发送token请求
    let token = localStorage.getItem('token')?localStorage.getItem('token'):'';
    if(!token){
      token = await getToken();
    }
      
    // 在发送请求之前添加自定义header信息
    config.headers['Authorization'] ='Bearer ' + token;
    config.headers['TimeStamp'] = getTime();
    config.headers['LicId'] = LicId;
    config.headers['FrontCode'] = FrontCode;
    config.headers['WxAppId'] = WxAppId;   

    
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
instance.interceptors.response.use(
  (response) => {
    // 对响应数据进行处理
    return response.data;
  },
  (error) => {
    return Promise.reject(error);
  }
);


  

// 封装GET请求
export function get(url:string, params:any) {
  return instance.get(url, { params });
}

// 封装POST请求
export function post(url:string, data:any) {
  return instance.post(url, data);
}

注意这里,baseURL要和代理中设置的一致

项目正常编写,本地运行,测试正常后,准备上线docker

3。vite打包。注意调整静态资源路径,注意配置package.json,除此以外也没什么

正常按配置执行打包 npm run build:prod —— 这里和package.json里一样就可以了

执行完成后,得到dist文件夹。上线文件就是它了

现在转到服务器上操作

1。将dist上传到服务器的文件夹里,一般是在/www/wwwroot 文件夹下面建立一个新的文件夹,比如叫做 newpro

将dist上传到newpro,注意是整个文件夹上传,不是dist里面的内容上传

2。在newpro文件夹里,建立Dockerfile文件,可以在本地写好,传上去。注意:这个文件没有扩展名

文件内容如下:

# 使用官方的 Nginx 镜像作为基础镜像
FROM nginx:latest

# 将本地dist文件夹内的内容复制到容器中的nginx默认工作目录
COPY dist /usr/share/nginx/html

# 替换nginx配置文件(如果需要自定义)
#COPY nginx.conf /etc/nginx/conf.d/default.conf

# 暴露Nginx的默认端口
EXPOSE 80

# 启动Nginx服务
CMD ["nginx", "-g", "daemon off;"]

上传到服务器后:

现在在newpro文件夹里进入终端,执行docker命令,生成镜像。如果你用的是宝塔面板,那么就是下面这样的

在终端中执行以下命令,注意最后有个 点

docker build -t xxx(英文镜像名称) . 

执行成功后,再执行

docker run -d --name 英文的容器名称(自己起) -p 10726:80 镜像名称(刚刚生成的)

注意: 10726:80 分别代表服务器的端口和docker里的端口。这个操作表示把服务器的10726端口映射到docker的80端口上 这个10726自己写就可以,只要不和其它端口冲突就行

到此,docker上线完毕

然后要在服务器的nginx中,发布网站,将域名绑定到网站上

网站的配置文件如下:

server
{
    listen 80;
    server_name xxx.net(绑定的域名);
    index index.html index.htm;
    #root /www/wwwroot/hua.crabstech.com;
    location /api/ {
        proxy_pass https://api.net:9006/; #API地址:端口
    }
     location / {

                proxy_pass http://localhost:10726;
        }
    
}

重要坑点来了

vite配置的代理,当dist离开本地电脑时,vite就已经不再负责了,服务器上的代理,由nginx代理来完成

重点:

这个代理,要在服务器nginx,不要在docker里做!

这个代理,要在服务器nginx,不要在docker里做!

这个代理,要在服务器nginx,不要在docker里做!

重要的事情说三遍

更重要的是,和vite.config.ts中不同的是,要加上末位的两个 '/'

一定要加

api后面的 '/'不加,nginx配置文件会报错

地址后面的'/'不加,反向代理配置不生效

一定要加!一定要加!一定要加!

如果做完以上这些,反向仍然不生效,可以参考下面的博文试试

Nginx问题之反向代理无法成功_nginx x-forwarded-for不生效-CSDN博客

省流解释:要在被访问的API服务器的nginx配置中,添加当前网站域名。

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

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

相关文章

矩阵键盘的使用

在定义局部变量时,一定要给该变量赋初值。在这个程序中,给按键按下的返回值变量 KeyNum 赋值为 20 。 矩阵键盘线行扫描法的学习链接:https://www.bilibili.com/video/BV1dv411z7Gd/?spm_id_from333.999.0.0&vd_sourceb91967c499b23106…

推荐系统|概要_基本概念

文章目录 基本概念曝光点击相关指标点击率点赞率/收藏率/转发率阅读完成率总结北极星指标 实验流程 基本概念 曝光 笔记出现在首页,叫作曝光。 点击 用户从笔记表面进入到相关笔记的详情页,叫作一次点击。 除此之外,用户的喜爱&#xff0c…

Mybatis-Plus扩展

7 MybatisX插件[扩展] 7.1 MybatisX插件介绍 MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。 安装方法:打开 IDEA,进入 File -> Settings -> Plugins -> Browse Repositories,输入 mybatisx 搜索并安装。 功…

基于Springboot的视频网站系统的设计与实现(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的视频网站系统的设计与实现(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层…

Java入门高频考查基础知识8(腾讯18问1.5万字参考答案)

刷题专栏:http://t.csdnimg.cn/gvB6r Java 是一种广泛使用的面向对象编程语言,在软件开发领域有着重要的地位。Java 提供了丰富的库和强大的特性,适用于多种应用场景,包括企业应用、移动应用、嵌入式系统等。 以下是几个面试技巧&…

Prometheus的pod部署

创建命名空间和账户以及集群账户 kubectl create ns monitor-sa kubectl create serviceaccount monitor -n monitor-sa kubectl create clusterrolebinding monitor-clusterrolebinding -n monitor-sa --clusterrolecluster-admin --serviceaccountmonitor-sa:monitor 创建…

电动汽车|不同类型电动汽车充电负荷蒙特卡洛法模拟研究(包括常规充电、快速充电、更换电池)

目录 主要内容 结果一览 常规充电 快速充电 更换电池 详实文档资料 下载链接 主要内容 本程序采用蒙特卡洛模拟了不同类型电动汽车充电负荷特点,包括常规充电、快速充电和更换电池三种。 充放电行为分为无序充电行为、受控充电行为和受控充放电行为…

大专生能不能学习鸿蒙开发?

目前安卓有2,000万的开发者。本科及以上学历占比为35%;iOS有2,400万开发者,本科及以上学历占比为40% 绝大多数的前端开发者都是大专及以下学历,在2023年华为开发者大会上余承东透露华为的开发者目前有200万,但鸿蒙开发者统计的数据…

【MyBatis】快速入门MyBatis(保姆式教学),你值得一看

文章目录 📄前言一. Mybatis简介✈️1. 什么是Mybatis🚀2. 为什么使用Mybatis 二. Mybatis快速入门🍆1. mybatis使用前准备1.1 创建springboot项目并引入相关依赖1.2 在 application.ym中进行数据源的配置1.3 创建数据表,准备表数…

【竞技宝jjb.lol】LOL:经典大龙毁一生 WE鏖战三局力克FPX

北京时间2024年1月30日,英雄联盟LPL2024春季赛在昨天迎来第二周首个比赛日,本日首场比赛由WE对阵FPX。本场比赛双方前两局战至1-1平,决胜局FPX一度建立不小的经济优势,然而太过冒险的打大龙决策最终让其功亏一篑,WE鏖战…

备战蓝桥杯---数据结构与STL应用(基础3)

今天我们主要介绍的是pair,string,set,map pair:我们可以把它当作一个结构体&#xff1a; void solve(){pair<int int> a;//创建amake_pair(1,2);//添加元素cout<<a.first<<endl<<a.second<<endl;}//输出 当然&#xff0c;它也可以嵌套&#…

Web自动化—Cypress 测试框架概述

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 Cypress 测试框架概述 1.1 Cypress 默认文件结构 在C…

Gunicorn性能优化:提升Python Web应用的服务效率

在Python Web开发中&#xff0c;Gunicorn作为WSGI HTTP服务器&#xff0c;常常作为Web应用&#xff08;如Django或Flask&#xff09;与反向代理或负载均衡器之间的桥梁。为了充分发挥其性能&#xff0c;本文将提供一些实用的Gunicorn配置建议。 Gunicorn架构 Gunicorn采用了预…

hcip---ospf综合实验

一&#xff1a;实验要求 1、R4为ISP&#xff0c;其上只能配置IP地址&#xff0c;R4与其所有直连设备间均使用公有IP 2、R3-R5/6/7为MGRE环境&#xff0c;R3为中心站点 3、整个OSPF环境IP基于R4的环回 4、所有设备均可访问R4的环回 5、减少LSA的更新量&#xff0c;加快收敛…

Prometheus配置与管理

1 配置文件 Prometheus通过命令行和配置文件进行配置&#xff0c;命令行配置不能修改的系统参数&#xff08;例如存储位置&#xff0c;要保留在磁盘和内存中的数据量等&#xff09;&#xff0c;但配置文件定义了与抓取作业及其实例相关的所有内容&#xff0c;以及哪些规则文件…

orcad原理图按页码标注器件位号-allegro

rCAD多页原理图器件按页编号的设置方法 OrCAD Capture作为当今世界最流行的原理图输入工具&#xff0c;它具有简单直观的用户设计界面。orCAD Capture提供层次式电路和平坦式电路两种原理图绘制方式&#xff0c;设计师可以更快、更简捷、更直观地完成原理图设计与绘制。但随着电…

SELINUX导致的网络服务问题解决

第一&#xff1a;开启相关服务&#xff0c;监控SELINUX 相关服务&#xff1a;setroubleshoot,auditd,大多数都是以se开头的 如果没有此服务&#xff0c;先yum下&#xff0c;然后查看状态 这里关于auditd说明&#xff0c;centos7不可以用systemctl重启auditd服务&#xff0c;…

使用PowerBI 基于Adventure Works案例分析

Adventure Works案例分析 前言 数据时代来临&#xff0c;但一个人要顺应时代的发展是真理。 数据分析的核心要素 那数分到底是什么&#xff1f; 显然DT 并不等同于 IT&#xff0c;我们需要的不仅仅是更快的服务器、更多的数据、更好用的工具。这些都是重要的组成部分&…

我在代码随想录|写代码Day20之二叉树-700. 二叉搜索树中的搜索,98. 验证二叉搜索树,530.二叉搜索树的最小绝对差

学习目标&#xff1a; 博主介绍: 27dCnc 专题 : 数据结构帮助小白快速入门 &#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d; ☆*: .&#xff61;. o(≧▽≦)…

springboot整合日志处理Logback

引言 ​ springboot框架 集成日志 logback 日志 ​ Logback是由log4j创始人设计的又一个开源日志组件。目前&#xff0c;logback分为三个模块&#xff1a;logback-core&#xff0c;logback-classic和logback-access。是对log4j日志展示进一步改进! 日志的级别 All < Trace…