前端项目通过 Nginx 发布至 Linux,并通过 rewrite 配置访问后端接口

〇、前言

本文通过将 arco 框架的前端项目,部署至 CentOS 7,并访问同服务器的 WebAPI 接口,来简单演示一下,如何将前端项目发布至 Linux 系统。

关于 ASP.NET WebAPI 发布至 Linux 的步骤,可以参考博主过往文章: https://www.cnblogs.com/hnzhengfy/p/18384107/webapi_centos

一、简单创建一个前端项目,基于 Arco Design Vue

1.1 环境准备和项目创建

首先是要提前安装好 nodejs,注意版本会有影响,本文推荐直接安装 18.20.0 版本,下文 1.2 中问题汇总再详解。

下载地址可使用阿里云镜像地址: https://mirrors.aliyun.com/nodejs-release/

然后安装 arco cli :

npm i -g arco-cli

上述环境准备好后,就可以进行项目的初始化了。如下:

// 初始化示例项目
E:\OneSelf\ArcoDesignVueWorkSpace>npm init web.test.arco___                    ____            _/   |  ______________  / __ \___  _____(_)___ _____/ /| | / ___/ ___/ __ \/ / / / _ \/ ___/ / __ `/ __ \/ ___ |/ /  / /__/ /_/ / /_/ /  __(__  ) / /_/ / / / //_/  |_/_/   \___/\____/_____/\___/____/_/\__, /_/ /_//____/v1.27.5? 路径已经存在,确认要覆盖它吗? E:\OneSelf\ArcoDesignVueWorkSpace\web.test.arco Yes
? 请选择你希望使用的技术栈 Vue
? 请选择所要创建项目的类型 Arco Pro 项目
? 请选择 Arco Pro 模板 完整版(包含所有页面)正在初始化项目于 E:\OneSelf\ArcoDesignVueWorkSpace\web.test.arco
√ 获取项目模板成功
√ 模板内容拷贝完成
√ 模板内容适配完成
√ 项目依赖安装完成
******************************************************************************Read README.md for help information. Execute following command to start$ cd web.test.arco$ pnpm run dev
******************************************************************************

最后,直接运行项目:

E:\OneSelf\ArcoDesignVueWorkSpace\web.test.arco>npm run dev> arco-design-pro-vue@1.0.0 dev
> vite --config ./config/vite.config.dev.tsVITE v3.2.10  ready in 2940 ms➜  Local:   http://localhost:5173/➜  Network: use --host to expose

通过地址 http://localhost:5173/ 进行访问,直接登录后即可查看示例页面: 

最后,可以通过命令 npm run build 将示例项目打包,备用。

1.2 遇到的问题

1.2.1 初始化失败【Error: spawnSync npm.cmd EINVAL】

// 报错详情:
errno: -4071, code: 'EINVAL', syscall: 'spawnSync npm.cmd', path: 'npm.cmd',
arco design 初始化项目时报错:× 模板内容拷贝失败 Error: spawnSync npm.cmd EINVAL

原因是 child_process.spawn 有漏洞 (CVE-2024-27980)-(HIGH),调用要加 { shell: true }。2024.4.10 node 修复了这个漏洞,代码执行就报错了。cli 下载 arco-design-pro-vue 执行到 .arco-cli\init.js 就出现 spawn 报错。

解决办法:使用 18.20.2,20.12.2,21.17.3 之前的版本就可以了。我用 18.20.0 版本就可以了。各版本阿里云下载地址:https://mirrors.aliyun.com/nodejs-release/

参考:https://github.com/arco-design/arco-cli/issues/92

1.2.2 镜像地址证书过期

// 错误提示:
request to https://registry.npm.taobao.org/axios failed,reason: certificate has expired

更新镜像地址即可。

// 先备份 npm 配置,可以防止在更换过程中出现意外导致配置丢失
npm config get > npm_config.txt
npm config set registry https://registry.npmmirror.com
npm install --save-dev @arco-design/web-vue
npm i -g arco-cli

1.2.3 项目依赖安失败

// 报错详情:
× 项目依赖安失败,你可以稍后尝试手动安装项目依赖
Error: Command 「yarn 」 executed failed:
warning ..\package.json: No license field
warning gifsicle > bin-build > tempfile > uuid@3.4.0: Please upgrade  to version 7 or higher.
。。。

解决方案:

  • 打开命令行,切换到项目目录,例如:cd your_project_directory。
  • 运行以下命令来清除之前的依赖缓存:yarn cache clean。
  • 更新项目的依赖包:yarn upgrade。
  • 重新安装项目依赖:yarn install。

二、Nginx 安装和配置

安装步骤详见博主过往文章(Nginx的安装和测试:https://www.cnblogs.com/hnzhengfy/p/Nginx.html#_label3),本文不在赘述。

配置文件位置:/usr/local/nginx/conf 中的 nginx.conf。

执行程序位置:/usr/local/nginx/sbin 中的 nginx。

2.1 Nginx 文件配置

先将打包好的前端测试文件,上传到 Linux 中,本文示例是复制到 /home/web.arco 文件夹。

配置大概思路:

  • 在前端项目中,其实是分两种请求的,一种是页面加载,另一种是访问后端接口进行数据操作。
  • 如何区分这两种操作?那就只能通过请求路径了,给接口请求的路径统一加个标记,比如 /apiarco。
  • 然后,这个路径中的标记在后端接口中又是没有的,那就需要在 Nginx 中做下替换,即 URL 重写。
  • 经过重写后的请求,就会直接到达候选 api 服务,当然后端也有必要配置允许跨域访问。

如下 Nginx 配置文件中的 server 模块:

    server {listen       8001;listen       [::]:8001;server_name  _;root         /home/web.arco; # 设置服务器的根目录为 /home/web.arcolocation / {root   /home/web.arco;index  index.html index.htm; # 尝试按照顺序查找 index.html 或 index.htm 文件try_files $uri $uri/ /index.html; # 如果找不到这些文件,它将返回 /index.html}# /apiarco 路径中包含此标识,进行特殊处理location /apiarco {proxy_pass http://localhost:5000/; # 将请求代理到本地的 5000 端口,就是 api 接口地址rewrite ^/apiarco/(.*)$ /$1 break; # URL 重写为去掉 /apiarco 前缀}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}

当同时部署多个前端服务时,可以再配置一个 server 节点,例如:

    server {listen       8002;listen       [::]:8002;server_name  _;root         /home/web.arco.new;location / {root   /home/web.arco.new;index  index.html index.htm;try_files $uri $uri/ /index.html;}location /apiarconew {proxy_pass http://localhost:5000/;rewrite ^/apiarconew/(.*)$ /$1 break;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

练习第四周8.31

作业: 1、安装burp并实现抓取HTTP站点的数据包(HTTPS站点暂时不要求)2、练习Tomcat PUT方法任意写文件漏洞(CVE-2017-12615),提供蚁剑连接成功截图3、练习S2-048 远程代码执行漏洞(CVE-2017-9791),提供命令执行截图 4、练习JBoss 5.x/6.x 反序列化漏洞(CVE-2017-1214…

【csp201912-2】回收站选址

题目背景开学了,可是校园里堆积了不少垃圾杂物。热心的同学们纷纷自发前来清理,为学校注入正能量~ 题目描述 通过无人机航拍我们已经知晓了n处尚待清理的垃圾位置,其中第i(1≤i≤n)处的坐标为(x,y),保证所有的坐标均为整数。我们希望在垃圾集中的地方建立些回收站。具体来说…

【Ehviewer绿色版】1.9.8.4最新版本下载2024安卓苹果

Ehviewer 是一款主要用于浏览和下载漫画、插画等二次元图像内容的软件。适用安卓和苹果系统,Ehviewer拥有海量的漫画作品,涵盖各种题材和风格,包括日本漫画、韩国漫画、欧美漫画以及国内的一些同人创作等。无论是热门的商业漫画还是小众的独立作品,都能在 Ehviewer上找到,…

uniapp - uView 组件库的u-button 不支持 @click.stop事件,会报错 - 解决

包一层view即可,点击事件不要写在按钮上 本文来自博客园,作者:岑惜,转载请注明原文链接:https://www.cnblogs.com/c2g5201314/p/18414452响应开源精神相互学习,内容良币驱除劣币

章13——常用类——包装类,Integer类

包装类ctrl + b 可以跳转源代码。char 和 boolean的继承体系:包装类和基本数据的转换//装箱int n = 200;Integer integer = n;//拆箱int n1 = integer;包装类练习题三元运算符中是一个整体,其中精度最高的是double,所以无论结果返回什么,都会提高obj1的精度。 包装类到Stri…

大模型应用开发初探 : 手搓一个简易Agent

本文简单介绍AI Agent的基本概念 和 工作方式,目前主要有两种开发Agent的模式,一种是高代码手搓,另一种是低代码拖拉拽。然后,通过C# + Semantic Kernel + 智谱LLM模型 演示了如何快速开发一个简易的AI Agent,虽然它只是个Demo,但希望对你快速了解Agent有所帮助!大家好,…

安装vCenter VCSA 7.0 报错 Failed to run vdcpromo 的问题

百度了一下说是DNS的问题,但我也设置了8.8.8.8或电信的dns,都不行。外网找了一下说要设置为127.0.0.1,但是7.0U3a后的版本不允许填写127.0.0.1了。最后找到一个通过CLI的方式安装可以避免这个问题。 首先创建一个CLI的横版文件,内容如下: {"__version": "2…

PostSync介绍

PostSync 促进技术文章发展介绍 这是一个开源的同步文章的软件,你可以使用它来同步你的文章到多个平台。 使用打开浏览器,登录各个平台的账号,掘金、CSDN、知乎、公众号、哔哩哔哩、博客园、个人WordPress 打开config.yaml文件,配置你的浏览器信息以及浏览器用户数据目录 运…

【linux】centos7安装8.4.2版本mysql

1、前置: 清除mysql相关数据rpm -qa | grep mariadbrpm -e --nodeps 查出来的文件名rpm -qa | grep mysqlrpm -e --nodeps 查出来的文件名2、安装mysql依赖包(没试过不装会有什么问题)# 查找libaio [root@node2 ~]# rpm -qa|grep libaio# 安装libaio [root@node2 ~]# yum -y…

QTreeView实现搜索功能并且关键字标红

1、需求描述 实现组织树搜索,关键字红色显示;搜索规则,名称匹配显示,没有匹配不显示,子节点匹配,父节点即使没有匹配也显示;2.实现方法 (1)top节点名称匹配关键则显示,否则隐藏void TreeTaskList::SlotFilterChanged(QString strText) {m_TreeDelegate->setProper…