iis部署前后端分离项目(React前端,Node.js后端)
iis虽然已经有点过时,但不少用户还在用,故总结一下。
1. 安装iis
如果电脑没有自带iis管理器,打开控制面板->程序->启用或关闭Windows功能,勾选iis安装即可
![![[Pasted image 20240627164313.png]]](https://img-blog.csdnimg.cn/direct/9b1dfd31eb22429a81a1c4b980da4efb.png)
2. 部署前端项目
打开iis,添加网站,物理路径指向前端打包后文件夹
![![[Pasted image 20240627164510.png]]](https://img-blog.csdnimg.cn/direct/fccfbdbfd8a44b518d4adeb8a7f06ded.png)
此时浏览器打开http://localhost:3000即可正常访问,但是输入其它路由刷新会404
![![[Pasted image 20240627173100.png]]](https://img-blog.csdnimg.cn/direct/724baf2efc0449a89c852d0edaf9a21d.png)
★解决iis部署后vue、react项目刷新404问题
- 安装
url重写功能
下载地址:https://www.iis.net/downloads/microsoft/url-rewrite
![![[Pasted image 20240627165136.png]]](https://img-blog.csdnimg.cn/direct/f2c8534c37484943868f3739db6dae52.png)
- 添加规则
下载安装后,重启iis后,找到站点,进入URL重写模块,添加空白规则
![![[Pasted image 20240627165440.png]]](https://img-blog.csdnimg.cn/direct/9501bdd8bbc845cba2ff325419d62a9c.png)
名称随意,选择与模式匹配、通配符、*
添加两个条件:不是文件,不是目录
最后重写url指向index.html即可
![![[03052015f5b59a07aea33d14e6a1dc43.png]]](https://img-blog.csdnimg.cn/direct/7c30d22c98d449bbba94d0b19eb4d16c.png)
重启站点,刷新不再404
3. 部署node服务
- 安装
iisnode功能
下载地址:https://github.com/tjanczuk/iisnode/wiki/iisnode-releases
![![[Pasted image 20240627170344.png]]](https://img-blog.csdnimg.cn/direct/67f351b23e5e4f1193d0db64142a638a.png)
- 添加新站点,指向node的部署包
![![[Pasted image 20240627170535.png]]](https://img-blog.csdnimg.cn/direct/33a61815edbc405b87c81e37874a9af0.png)
- 在node的部署包下,添加web.config文件
![![[Pasted image 20240627170812.png]]](https://img-blog.csdnimg.cn/direct/691af87e91324297b34072ed6f4ce9cd.png)
内容为:
<configuration><system.webServer><!-- indicates that the hello.js file is a node.js application to be handled by the iisnode module --><handlers><add name="iisnode" path="app.js" verb="*" modules="iisnode" /></handlers><!-- use URL rewriting to redirect the entire branch of the URL namespaceto hello.js node.js application; for example, the following URLs will all be handled by hello.js:http://localhost/node/express/myapp/foohttp://localhost/node/express/myapp/bar--><rewrite><rules><rule name="myapp"><match url="/*" /><action type="Rewrite" url="app.js" /></rule></rules></rewrite></system.webServer>
</configuration>
- 修改app.js中的listen端口为process.env.PORT
// old
app.listen(3001, function () {console.log("服务器启动成功了端口是:3001")
})// new
app.listen(process.env.PORT||3001)
- 重启api站点,浏览器打开http://localhost:3001/test能正常访问
![![[Pasted image 20240627171152.png]]](https://img-blog.csdnimg.cn/direct/266af9ae0b8d463f87352b085ea40abb.png)
4. 前端反向代理
前端请求接口地址是:http://localhost:3000/api/test
实际需要转发到:http://localhost:3001/test
- 安装
Application Request Routing功能
下载地址:https://www.iis.net/downloads/microsoft/application-request-routing
![![[Pasted image 20240627171651.png]]](https://img-blog.csdnimg.cn/direct/4d94019c315f4d82afae452ea46727aa.png)
- 开启反向代理
安装好重启iis,打开Application Request Routing,然后点击Server Proxy Settings…,再勾选Enable proxy
![![[Pasted image 20240627171804.png]]](https://img-blog.csdnimg.cn/direct/f126a8fd7735419e9b69e3dd75b9975a.png)
![![[Pasted image 20240627171915.png]]](https://img-blog.csdnimg.cn/direct/30e72474dba64011addf7e269003bccf.png)
![![[Pasted image 20240627171935.png]]](https://img-blog.csdnimg.cn/direct/422affb960b34f8d87154259ffa2f331.png)
- 添加代理规则
回到web站点,添加空白规则,与模式匹配,通配符,*api/*
![![[Pasted image 20240627172208.png]]](https://img-blog.csdnimg.cn/direct/e78667972ad14941b99c73dbcabc247c.png)
重写URL,http://127.0.0.1:3001/{R:2},勾选停止处理后续规则
![![[Pasted image 20240627172234.png]]](https://img-blog.csdnimg.cn/direct/7fcc20eef6d84bd599b4ba2ae44ebdf0.png)
为啥是{R:2},通配符测试,因为我的后台没有api前缀,如果后台有/api可以用{R:0}
![![[Pasted image 20240627172418.png]]](https://img-blog.csdnimg.cn/direct/24d188d52ca64f6a87a7dc26ea3dd31d.png)
- 规则顺序
api匹配规则,需要置顶,可以点击规则上下移动
![![[Pasted image 20240627172630.png]]](https://img-blog.csdnimg.cn/direct/7748f5f7b0cd479a96f4639661f656a1.png)
至此,重启站点,打开http://localhost:3000/api/test,也能访问
![![[Pasted image 20240627172751.png]]](https://img-blog.csdnimg.cn/direct/ce42f5ec72724fbc8bd719156e5d734a.png)
5. 前后端同一个端口部署
前面说了分离部署,占用两个端口,通过代理转发请求,能不能共用一个端口?
- web站点添加应用程序,物理路径指向
![![[Pasted image 20240628101036.png]]](https://img-blog.csdnimg.cn/direct/a29ef1ba58f84ac9b0c3e700f12e268a.png)
![![[Pasted image 20240628101125.png]]](https://img-blog.csdnimg.cn/direct/5d6528c7af884bb99c6a3ef493ebf178.png)
- web站点URL重写保留一个刷新404的规则即可
![![[Pasted image 20240628102825.png]]](https://img-blog.csdnimg.cn/direct/c36abc6b736748ea8a7c870c4b9f80ae.png)
- api站点URL重写有两个规则,一个是自己的node,一个继承了父站点,注意顺序
![![[Pasted image 20240628102943.png]]](https://img-blog.csdnimg.cn/direct/b7e4cb34194a4f2db022d65b417e410a.png)
- 因为多了一层api应用程序,node端接口也需要多加一层api前缀(目前不知道指向app.js时如何去掉api这层,只能后端同步加一层了),打开http://localhost:3000/api/test能正常访问
![![[Pasted image 20240628103128.png]]](https://img-blog.csdnimg.cn/direct/f51b43dec2b54da0abefa1727795d462.png)
同端口部署,其实就是通过规则匹配到api跳走,但这种方式,不方便前后端单独更新程序,需要整个重启,而且部署时规则匹配容易出现问题,有利有弊,自行选择
5. 其它错误
Q1. iis文件夹权限不足
文件夹右键属性-安全-编辑-添加用户或组Everyone,勾选所有权限
![![[Pasted image 20240627100515.png]]](https://img-blog.csdnimg.cn/direct/5913ed7ad4d34efeb7e057e8eae7cb14.png)
Q2. 500.19无法访问请求的页面
![![[Pasted image 20240627134157.png]]](https://img-blog.csdnimg.cn/direct/3fb6979287f648aa899a987c6108e4cb.png)
进入Framework64版本文件夹
cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
打开cmd执行unlock:
C:\windows\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers
Q3. The iisnode module is unable to start the node.exe process.
![![[Pasted image 20240627134738.png]]](https://img-blog.csdnimg.cn/direct/9341cad7f21c4719bd5a7daf44640a6b.png)
cmd执行:
net stop was /y & net start w3svc
或者在web.config中指定node.exe的位置
<iisnode watchedFiles="*.js;node_modules\*;routes\*.js;views\*.jade" nodeProcessCommandLine="C:\Program Files\nodejs\node.exe"/>
相关文章:
iis部署前后端分离项目(React前端,Node.js后端)
iis虽然已经有点过时,但不少用户还在用,故总结一下。 1. 安装iis 如果电脑没有自带iis管理器,打开控制面板->程序->启用或关闭Windows功能,勾选iis安装即可 2. 部署前端项目 打开iis,添加网站,物理…...
【前端项目笔记】9 数据报表
数据报表 效果展示: 在开发代码之前新建分支 git checkout -b report 新建分支report git branch 查看分支 git push -u origin report 将本地report分支推送到云端origin并命名为report 通过路由的形式将数据报表加载到页面中 渲染数据报表基本布局 面包屑导航…...
等保测评推动哈尔滨数字化转型中的安全保障
在数字经济的浪潮下,哈尔滨作为东北老工业基地的核心城市,正积极推动数字化转型,以创新技术驱动产业升级和经济发展。网络安全等级保护测评(简称“等保测评”)作为国家网络安全战略的重要组成部分,为哈尔滨…...
#pragma 指令
#pragma 指令作用是设定编译器的状态或者是指示编译器完成一些特定的动作 message 参数能够在编译信息输出窗口中输出相应的信息 #pragma message(“消息文本”) code_seg参数能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它 #pragma…...
【Excel】 批量跳转图片
目录标题 1. CtrlA全选图片 → 右键 → 大小和属性2. 取消 锁定纵横比 → 跳转高度宽度 → 关闭窗口3. 最后一图拉到最后一单元格 → Alt吸附边框4. CtrlA全选图片 → 对齐 → 左对齐 → 纵向分布!…...
网站更新改版了
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:Leo杂谈 ✨特色专栏:MySQL学…...
初识大模型
前提:学习一项技术,要从原理、实践、认知三个方面进行攻克。 不懂原理就不会举一反三,走不了太远。 不懂实践就只能纸上谈兵,做事不落地。 认知不高就无法作对决策,天花板太低。 一、知识体系 二、什么是AI 基于机器…...
Open3D SVD算法实现对应点集配准
目录 一、概述 1.1基本思想 1.2实现步骤 二、代码实现 三、实现效果 3.1原始点云 3.2配准后点云 3.3变换矩阵 一、概述 在点云配准中,SVD(Singular Value Decomposition,奇异值分解)方法是一种常用的精确计算旋转和平移变换的算法。其目标是找到一个刚体变…...
bWAPP靶场安装
bWAPP安装 下载 git地址:https://github.com/raesene/bWAPP 百度网盘地址:链接:https://pan.baidu.com/s/1Y-LvHxyW7SozGFtHoc9PKA 提取码:4tt8 –来自百度网盘超级会员V5的分享 phpstudy中打开根目录,并将下载的文…...
SpringBoot + MyBatisPlus 实现多租户分库
一、引言 在如今的软件开发中,多租户(Multi-Tenancy)应用已经变得越来越常见。多租户是一种软件架构技术,它允许一个应用程序实例为多个租户提供服务。每个租户都有自己的数据和配置,但应用程序实例是共享的。而在我们的Spring Boot MyBati…...
【数据挖掘】银行信用卡风险大数据分析与挖掘
银行信用卡风险大数据分析与挖掘 1、实验目的 中国某个商业银行高层发现自家信用卡存在严重的欺诈和拖欠现象,已经影响到自身经营和发展。银行高层希望大数据分析部门采用数据挖掘技术,对影响用户信用等级的主要因素进行分析,结合信用卡用户的人口特征属性对欺诈行为和拖欠…...
使用 Qt 和 ECharts 进行数据可视化
文章目录 示例图表预览折线图散点图柱状图使用 Qt 和 ECharts 进行数据可视化一、准备工作1. 安装 Qt2. 准备 ECharts二、在 Qt 中使用 ECharts1. 创建 Qt 项目2. 配置项目文件3. 在 UI 中添加 WebEngineView4. 加载 ECharts三、创建折线图、散点图和柱状图1. 折线图2. 散点图3…...
【机器学习】在【Pycharm】中的实践教程:使用【逻辑回归模型】进行【乳腺癌检测】
目录 案例背景 具体问题 1. 环境准备 小李的理解 知识点 2. 数据准备 2.1 导入必要的库和数据集 小李的理解 知识点 2.2 数据集基本信息 小李的理解 知识点 注意事项 3. 数据预处理 3.1 划分训练集和测试集 小李的理解 知识点 注意事项 3.2 数据标准化 小李…...
【搭建Nacos服务】centos7 docker从0搭建Nacos服务
前言 本次搭建基于阿里云服务器系统为(CentOS7 Linux)、Nacos(2.0.3)、Docker version 26.1.4 本次搭建基于一个新的云服务器 安装java yum install -y java-1.8.0-openjdk.x86_64安装驱动以及gcc等前置需要的命令 yum install …...
将 build.gradle 配置从 Groovy 迁移到 Kotlin
目录 时间轴 常用术语 脚本文件命名 转换语法 为方法调用添加圆括号 为分配调用添加 转换字符串 重命名文件扩展名 将 def 替换为 val 或 var 为布尔值属性添加 is 前缀 转换列表和映射 配置 build 类型 从 buildscript 迁移到插件块 查找插件 ID 执行重构 转…...
5G(NR) NTN 卫星组网架构
5G(NR) NTN 卫星组网架构 参考 3GPP TR 38.821 5G NTN 技术适用于高轨、低轨等多种星座部署场景,是实现星地网络融合发展的可行技术路线。5G NTN 网络分为用户段、空间段和地面段三部分。其中用户段由各种用户终端组成,包括手持、便携站、嵌入式终端、车…...
WEB安全-文件上传漏洞
1 需求 2 接口 3 MIME类型 在Web开发中,MIME(Multipurpose Internet Mail Extensions)类型用于标识和表示文档的格式。这些类型在HTTP请求和响应头中扮演着重要的角色,告诉浏览器如何解释和处理接收到的资源12。 以下是一些Web开发…...
Python函数 之 函数基础
print() 在控制台输出 input() 获取控制台输⼊的内容 type() 获取变量的数据类型 len() 获取容器的⻓度 (元素的个数) range() ⽣成⼀个序列[0, n) 以上都是我们学过的函数,函数可以实现⼀个特定的功能。我们将学习⾃⼰如何定义函数, 实现特定的功能。 1.函数是什么…...
昇思25天学习打卡营第11天|SSD目标检测
SSD网络 目标检测问题可以分为以下两个问题:1)分类:所有类别的概率;2)定位: 4个值(中心位置x,y,宽w,高h) Single Shot MultiBox Detector,SSD:单阶段的目标检测算法,通过卷积神经网络进行特征…...
MySQL篇五:基本查询
文章目录 前言1. Create1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 2. Retrieve2.1 SELECT 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式2.1.4 为查询结果指定别名2.1.5 结果去重 2.2 WHERE 条件2.2.1 练习 2.3 结果排序2.3.1 练习 …...
JAVA重点基础、进阶知识及易错点总结(1)---数据类型、运算符、流程控制
🚀 Java 巩固进阶 第1天 主题:数据类型、运算符与流程控制 —— 避开那些“隐形”的坑📅 进度概览:重启Java基础。 💡 核心价值:很多生产环境的Bug(如金额精度丢失、空指针崩溃、逻辑穿透&…...
避坑指南:华为Atlas200DK开发板联网常见错误及解决方法
华为Atlas200DK开发板联网避坑实战手册 当开发者第一次拿到华为Atlas200DK开发板时,联网往往是遇到的第一个技术门槛。这个看似简单的操作,在实际操作中却可能因为各种配置细节问题而耗费数小时。本文将深入剖析开发板联网过程中的典型故障场景ÿ…...
AHT20传感器数据漂移?STM32硬件I2C与软件模拟的稳定性对比测试
STM32硬件I2C与软件模拟I2C在AHT20传感器应用中的稳定性深度解析 工业级环境监测系统对温湿度数据的可靠性有着严苛要求。AHT20作为一款高精度温湿度传感器,其数据采集的稳定性直接关系到整个系统的可信度。本文将深入探讨STM32平台下硬件I2C与GPIO模拟I2C两种实现方…...
ComfyUI图片生成视频大模型技术选型与实战:从原理到生产环境部署
最近在搞一个AI视频生成的项目,用到了ComfyUI这个可视化工作流工具。说实话,刚开始选模型的时候真是眼花缭乱,Stable Diffusion Video、ModelScope、RunwayML……每个都说自己好,但实际用起来坑真不少。今天就把我趟过的路和总结的…...
3个关键步骤掌握BetaFlight黑匣子日志分析:从新手到专家
3个关键步骤掌握BetaFlight黑匣子日志分析:从新手到专家 【免费下载链接】blackbox-log-viewer Interactive log viewer for flight logs recorded with blackbox 项目地址: https://gitcode.com/gh_mirrors/bl/blackbox-log-viewer BetaFlight Blackbox Log…...
【MySQL | 第一篇】 深入理解三大日志(undo Redo Bin)
目录 Undo Log日志 Redo Log日志 Redo Log与Bin Log的区别 Bin Log日志 三大日志全流程 Undo Log日志 一、核心定义 Undo Log 是MySQL InnoDB存储引擎特有的事务回滚日志,核心作用是记录事务执行前的数据版本,用于事务回滚、MVCC实现,是…...
从ChatGPT到机器翻译:GRPO算法如何优化大语言模型的生成效果?
GRPO算法:大语言模型生成效果优化的新范式 在自然语言处理领域,序列生成任务的质量优化一直是研究热点。从ChatGPT的对话流畅度到机器翻译的准确性,生成效果直接影响用户体验。传统优化方法如PPO虽然有效,但在处理复杂语言任务时存…...
从零开始掌握30+种路径规划算法:可视化学习与实战指南
从零开始掌握30种路径规划算法:可视化学习与实战指南 【免费下载链接】PathPlanning Common used path planning algorithms with animations. 项目地址: https://gitcode.com/gh_mirrors/pa/PathPlanning 你是一个文章写手,你负责为开源项目写专…...
DecepGPT Schema-Driven Deception Detection with Multicultural Datasets and Robust Multimodal Learnin
DecepGPT: Schema-Driven Deception Detection with Multicultural Datasets and Robust Multimodal Learning Authors: Jiajian Huang, Dongliang Zhu, Zitong YU, Hui Ma, Jiayu Zhang, Chunmei Zhu, Xiaochun Cao Deep-Dive Summary: DeepGPT: 基于模式驱动的多文化数据集…...
Grok-1深度实战指南:3140亿参数混合专家模型的高级部署与优化
Grok-1深度实战指南:3140亿参数混合专家模型的高级部署与优化 【免费下载链接】grok-1 马斯克旗下xAI组织开源的Grok AI项目的代码仓库镜像,此次开源的Grok-1是一个3140亿参数的混合专家模型 项目地址: https://gitcode.com/GitHub_Trending/gr/grok-1…...
