作者 | 小码甲

来源 | 全栈码农画像(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 p. 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
☞数字政务是“新常态”——如何确保其合乎道德规范?
点分享点点赞点在看

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

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

    目前公司的Web项目是SPA应用,采用前后端分离开发,所以有时也会倒腾Vue框架. " 前后端应用最终以容器形态.在k8s中部署, 为此我搭建了基于Gitlab flow的Devops流程. ...

  2. 如何在 IIS 中部署 WCF

    在 IIS 中部署 WCF ,最重要的 是 Web.config 文件的配置 . 首先, 正常安装 IIS 2,注册 ServiceModelReg.exe -i 3,  WCF 的发布 , 需要 拷 ...

  3. 总是想起一首歌:多么痛的领悟

    总是想起一首歌:多么痛的领悟 - 总是想起一首歌:多么痛的领悟 有一种真挚的感情,远远比缠绵悱恻的爱情珍贵,那是人间最纯真的情感,不需要任何的基础和依靠的爱,不需要停泊和追逐永恒的爱. 这种爱叫着&q ...

  4. 多么痛的领悟!——我的2013拾遗总结

    多么痛的领悟!--我的2013拾遗总结 2013即将过去,回首走过的一年,是真学生时代终结的一年,是再次步入社会开启IT工作的一年,是从东北跨到南方第一次体会四季如春的一年,最重要的是彻底告别&quo ...

  5. 多么痛的领悟 ——我的2013拾遗总结

    多么痛的领悟!--我的2013拾遗总结 2013即将过去,回首走过的一年,是真学生时代终结的一年,是再次步入社会开启IT工作的一年,是从东北跨到南方第一次体会四季如春的一年,最重要的是彻底告别&quo ...

  6. 华为8年女硕离职:多么痛的领悟...

    华为8年女硕离职:多么痛的领悟... 2016-01-20 51CTO 一年前的十月,我离开了华为,不咸不淡.这个十月,和我一同入职的先生也离开了,心里的五味杂陈却异常凶猛的翻涌起来.过去的一年里,我 ...

  7. 多么痛的领悟!差不多2015年的时候,我开始关注股票

    多么痛的领悟!差不多2015年的时候,我开始关注股票.如果当时放50万进去买茅台,现在股票资产就会超过2000万. 之前看到过巴菲特讲过一句话,找到一个又湿又厚又长的坡,像滚雪球一样让财富越滚越大.我 ...

  8. 关于.NET5在IIS中部署的几个问题总结

    本来我的系列教程已经慢慢剥离开IIS了,毕竟有了Docker容器以后,配合Nginx使用真的很不错.但是还是有很多同学使用IIS的,这个不可否认IIS的重要性.随着.NET的发布,很多小伙伴已经开始升 ...

  9. 在IIS中部署Asp.net Mvc

    概述: 最近在做一个MVC 3的项目,在部署服务器时破费了一番功夫,特将过程整理下来,希望可以帮到大家! 本文主要介绍在IIS5.1.IIS6.0.IIS7.5中安装配置MVC 3的具体办法! 正文: ...

最新文章

  1. 敏捷(Agile)与精益(Lean)对比
  2. 网络犯罪分子为何针对中小企业?—Vecloud微云
  3. 数据双向绑定_手把手教你用JavaScript如何实现数据双向绑定
  4. A Walk Through the Forest HDU - 1142(dijkstra+动态规划)
  5. Go语言重新开始,Go Modules 的前世今生与基本使用
  6. matlab 贝叶斯工具箱,matlab的BNT贝叶斯工具箱错误求教
  7. 声明式事务、Spring 中常用注解、Ajax
  8. Bootstrap3 弹出提示插件的使用方法
  9. LCD液晶显示的51单片机简单计算器
  10. mysql 动态插入日期_mysql 如何动态传入一个时间得到此时间的某个时间点
  11. simpledateformat格式_为什么日期格式化时必须有使用y表示年,而不能用Y?
  12. 注册(二)之增加绑定
  13. 《labuladong的算法小抄》| 笔记
  14. python数据的存储结构是指_python数据结构
  15. 2017山东单招计算机试题,2017年山东单招数学模拟试题及标准答案.docx
  16. 驱动力3.0,动力全开~
  17. JAVA静态代理与动态代理(JDK和CGLIB)
  18. 目标码格式解析之DSP目标码Cinit段
  19. HDU-2140 Michael Scofield's letter 水题
  20. Posix API 与 网络协议栈 详细介绍

热门文章

  1. Java SE 8 docs:Static Methods、Instance Methods、Abstract Methods、Concrete Methods和Fields
  2. javax.mail.MessagingException: 553 authentication is required
  3. 写在这一年实习的总结
  4. vue项目首屏加载过久处理笔记
  5. node(基础)_node中的javascript
  6. EL表达式,JSP内置对象
  7. Webpack基础学习
  8. HTMO DOM部分---小练习;列表之间移动、日期选择、好友选中、滑动效果、滚动条效果、飞入飞出效果。...
  9. HDU 5515 Game of Flying Circus 二分
  10. 《编码规范和测试方法——C/C++版》作业 ·003——宏定义作用整理、设计删除数组元素的函数