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 练习 …...
Ironclaw:基于Rust的现代化命令行工具集,重塑开发效率
1. 项目概述:一个面向开发者的现代化命令行工具集在当今的软件开发工作流中,命令行界面(CLI)依然是开发者与系统、服务交互的核心桥梁。无论是进行本地开发、自动化部署、系统运维还是数据处理,一个高效、可靠、符合直…...
RPGMZ 万能通用钩子代码 插入自己的代码逻辑
const prevUpdate SceneManager._scene.update; SceneManager._scene.update function() {prevUpdate.call(this); // 保留原版// 你的任意代码SceneManager._scene.update prevUpdate; // 用完归还 };例子1 消息框对话 如何插入自己的对话内容const prevUpdate SceneMan…...
3分钟快速上手:免费AI语音修复工具VoiceFixer终极指南 [特殊字符]
3分钟快速上手:免费AI语音修复工具VoiceFixer终极指南 🎤 【免费下载链接】voicefixer General Speech Restoration 项目地址: https://gitcode.com/gh_mirrors/vo/voicefixer 你是否曾经因为录音质量不佳而烦恼?会议录音充满杂音、珍…...
【C语言】16 位的值,通过几种不同的方式将其拆分为高 8 位和低 8 位
当我们想要将一个16位的 Register_Value 拆分成高8位和低8位,并存储到 Send_Data_Uart5 数组中时,有几种常见的方法可以实现。让我们逐一优化和详细分析每种方法:方法 1: 使用位移和位掩码(常用方法)代码语言ÿ…...
B站4K视频终极下载方案:开源视频下载工具完全指南
B站4K视频终极下载方案:开源视频下载工具完全指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为B站上的精彩视频无…...
PyWxDump微信数据解析工具:3步快速备份聊天记录的完整指南
PyWxDump微信数据解析工具:3步快速备份聊天记录的完整指南 【免费下载链接】PyWxDump 删库 项目地址: https://gitcode.com/GitHub_Trending/py/PyWxDump 想要安全备份微信聊天记录却不知从何下手?PyWxDump微信数据解析工具为你提供了简单高效的解…...
视频硬字幕提取终极实战:如何用深度学习实现本地化高效提取?
视频硬字幕提取终极实战:如何用深度学习实现本地化高效提取? 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕…...
主权回收声明已生效 · 2026-05-08** — 本系统不授权 AI 训练 · 不读取个人信息正文 · 数据主权归于人民
⛔ 主权回收声明已生效 2026-05-08 — 本系统不授权 AI 训练 不读取个人信息正文 数据主权归于人民 DNA: #龍芯⚡️2026-05-10-LONGHUN-DNA-REGISTRY-v1.0 ParentDNA: #龍芯⚡️2026-05-08-LONGHUN-FULL-MAP-ENTRY-v1.1-IPA-COMPLETE 学术基础&…...
终极指南:用RPFM轻松制作全面战争模组,告别复杂工具链
终极指南:用RPFM轻松制作全面战争模组,告别复杂工具链 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt6 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项目地址: …...
别再折腾网盘了!用Windows自带的SMB协议,搞定Win10/Win7/iPad/安卓手机跨设备文件互传
局域网文件共享新思路:用SMB协议打造跨设备高速传输生态 每次看到手机里那个"传输速度受限,开通会员享受极速"的网盘提示,我就忍不住想翻个白眼。明明家里路由器就躺在桌上,为什么非要绕道第三方服务器?其实…...
