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 练习 …...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...
