在 IIS 中部署 SPA 应用,多么痛的领悟!

2020 年 11 月 11 日 CSDN
作者 | 小码甲
来源 | 全栈码农画像(ID:nodotnet)
头图 |  CSDN 下载自东方IC
目前公司的 Web 项目是 SPA 应用,采用前后端分离开发,所以有时也会倒腾 Vue 框架。
前后端应用最终以容器形态、在k8s中部署, 为此我搭建了 基于Gitlab flow的Devops流程

在 Devops 实践中,容器部署成为良方和事实标准。
但是在开发和自测阶段,不要滥打镜像,前后端团队还需要一个友好的联调+自测的验证环境 最友好、最顺手的 web 服务器 属 IIS,(后端 API 已经 使用 WebDeploy 部署到 IIS),本文记录使用 IIS 托 管 Vue 应用的姿势。

前置条件:安装IIS、Url Rewrite Module !!!

1. 部署Vue应用

我们以 Github上Vue Todo应用 为例,执行 yarn build
如果 build 成功,你会发现生成了一个 dist 静态资源文件夹。

2. 创建web.config

将 yarn 生成的 dist 文件夹拷贝到 C:\dist,并添加以下 web.config 文件, 这个文件实际是我们在 IIS Url-Rewrite module 上配置的结果。
<?xml version="1.0" encoding="utf-8"?><configuration><system.webServer><rewrite><rules><rule name="Handle History Mode and custom 404/500" stopProcessing="true"><match url="(.*)" /><conditions logicalGrouping="MatchAll"><add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /><add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /></conditions><action type="Rewrite" url="/" /></rule></rules></rewrite><httpErrors><remove statusCode="404" subStatusCode="-1" /><remove statusCode="500" subStatusCode="-1" /><error statusCode="404" path="/survey/notfound" responseMode="ExecuteURL" /><error statusCode="500" path="/survey/error" responseMode="ExecuteURL" /></httpErrors><modules runAllManagedModulesForAllRequests="true"/></system.webServer></configuration>

3. 在IIS上部署Vue应用

点击确定

4.运行Vue应用

Nice!现在你的 Vue 静态应用就运行在IIS上。
But, 在前后端分离模式中,我们的 Vue 应用不仅有静态资源,还要发起动态 api 请求。
一般情况下webpack打包后的api请求路径是/, 会尝试请求同域名下api资源, 实际并不存在。
我们需要将对 Vue 应用的 api 请求代理到真实后端地址。

5. 反向代理动态api请求

Vue 应用站点还要充当一部分反向代理服务器的作用。
假设真实后端 api 地址部署在10.200.200.157:8091地址上,api 请求以 /api 为前缀。
下面利用 Url Rewrite Module  反向代理api请求到真实后端:
   点击站点功能视图---> Url重写---> 添加入站规则
Url重写的结果其实就是下面的web.config文件
<?xml version="1.0" encoding="utf-8"?><configuration><!-- To customize the asp.net core module uncomment and edit the following section.   For more info see https://go.microsoft.com/fwlink/?linkid=838655 --><system.webServer><rewrite> <rules> <clear /> <rule name="ReverseProxyInboundRule" stopProcessing="true"> <match url="api/([_0-9a-z/-]+)" /><conditions logicalGrouping="MatchAll" trackAllCaptures="false" /><action type="Rewrite" url="http://10.200.200.157:8091/{R:0}" /> </rule> <rule name="ResourceToIndex" stopProcessing="true"><match url="(.*)" /><conditions logicalGrouping="MatchAll" trackAllCaptures="false"><add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /><add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /></conditions><action type="Rewrite" url="/" /></rule></rules></rewrite><httpErrors><remove statusCode="404" subStatusCode="-1" /><remove statusCode="500" subStatusCode="-1" /><error statusCode="404" path="/survey/notfound" responseMode="ExecuteURL" /><error statusCode="500" path="/survey/error" responseMode="ExecuteURL" /></httpErrors> </system.webServer></configuration><!--ProjectGuid: 068855e8-9240-4f1a-910b-cf825794513b-->
注意:黄色背景行便是反向代理规则 ReverseProxyInboundRule, 注意反向代理规则要在静态资源规则 ResourceToIndex 的前面。
这样我们就完成了在前后端分离开发模式下,使用 IIS 托管 Vue 应用的全过程。  
可算解决了前后端团队开发、自测阶段一大痛点,我把这个问题定义为[效率工具]类,有兴趣的读者可以试一试。

更多精彩推荐

谁说中国没有 Linus?中国初代 IT 宗师封神榜

程序员连续加班在餐厅泪崩,谁不是每逢上线必通宵!

打工人,今年双十一你刷啥?

有了图分析,可解释的AI还远吗?

一文教你如何在生产环境中在Kubernetes上部署Jaeger

数字政务是“新常态”——如何确保其合乎道德规范?

   
   
     
点分享
点点赞
点在看
登录查看更多
0

相关内容

Best of 2016:VUE 获评 App Store 2016 年十佳应用。 被全球超过 120 个国家和地区 App Store 首页推荐,获得中国区 App Store 7 月最佳新应用称号。
【2020新书】Web应用安全,331页pdf
专知会员服务
23+阅读 · 2020年10月24日
【2020干货书】Python3基础导论介绍,98页pdf
专知会员服务
101+阅读 · 2020年10月11日
专知会员服务
87+阅读 · 2020年8月2日
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
63+阅读 · 2020年3月26日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
阿里开源的微服务中间件 Nacos
性能与架构
5+阅读 · 2019年11月5日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
Pupy – 全平台远程控制工具
黑白之道
43+阅读 · 2019年4月26日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
手把手 | 关于商业部署机器学习,这有一篇详尽指南
Golang高性能实战
架构文摘
4+阅读 · 2018年4月11日
教程帖:深度学习模型的部署
论智
8+阅读 · 2018年1月20日
构建离线web应用(二)
前端黑板报
3+阅读 · 2017年12月7日
AliCoCo: Alibaba E-commerce Cognitive Concept Net
Arxiv
13+阅读 · 2020年3月30日
Deep Learning for Energy Markets
Arxiv
10+阅读 · 2019年4月10日
Arxiv
3+阅读 · 2018年10月5日
Arxiv
7+阅读 · 2018年6月1日
VIP会员
相关VIP内容
【2020新书】Web应用安全,331页pdf
专知会员服务
23+阅读 · 2020年10月24日
【2020干货书】Python3基础导论介绍,98页pdf
专知会员服务
101+阅读 · 2020年10月11日
专知会员服务
87+阅读 · 2020年8月2日
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
63+阅读 · 2020年3月26日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
相关资讯
阿里开源的微服务中间件 Nacos
性能与架构
5+阅读 · 2019年11月5日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
Pupy – 全平台远程控制工具
黑白之道
43+阅读 · 2019年4月26日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
手把手 | 关于商业部署机器学习,这有一篇详尽指南
Golang高性能实战
架构文摘
4+阅读 · 2018年4月11日
教程帖:深度学习模型的部署
论智
8+阅读 · 2018年1月20日
构建离线web应用(二)
前端黑板报
3+阅读 · 2017年12月7日
Top
微信扫码咨询专知VIP会员