使用IIS反向代理代替Nginx进行前后端分离开发

为IIS安装额外的模块

需要安装ARR(Application Request Routing)和URL重写(URL Rewrite)模块
Application Request Routing:https://www.iis.net/downloads/microsoft/application-request-routing
URL Rewrite:https://www.iis.net/downloads/microsoft/url-rewrite
分别下载,安装,然后彻底重启IIS,IIS管理器主页中出现下图所示的ARR和URL重写模块。

配置ARR

双击ARR模块进入,在右侧进入Server Proxy Settings

勾选Enable proxy即可。

配置URL重写

你会发现,在IIS服务器主页、站点主页、站点下属应用程序的功能视图中,均有URL重写。这里根据你要代理的URL选择在哪一级创建URL重写即可。
例如:

  • 想要访问http://localhost:8080/{PATH}时代理到其他服务,那么就应该在站点的URL重写模块中配置。
  • 想要访问http://localhost:8080/ABC/{PATH}时代理到其他服务,且/ABC下配置了应用程序,那么就应该在/ABC对应的应用程序内的URL重写模块中配置(在站点中配置也可,反之则不行)。

这里,我以/CRM2下的应用程序为例,进入它的URL重写模块,右侧菜单点击添加规则入站规则-空白规则。注意:不必要选择反向代理,这里没有反向代理这一项也不影响。

起一个名称,在模式中使用正则表达式书写你要匹配的路径和需要提取的匹配组,测试模式中可进行测试。例如下图中,模式为^MOBILE(/.*),将匹配以MOBILE/开头,后跟任意字符的路径,且可以使用{R:1}匹配组匹配到后续的路径。值得注意的是,输入进行匹配的路径,不包括协议、主机名、端口和所属应用程序的路径。比如我这个应用程序的路径是/ABC,那么它下面的URL重写模块拿到的就是/ABC后面的路径(不包括/ABC),这是一个需要注意的点,配错了会导致代理不生效报404。

下面的操作部分,操作类型重写,重写URL中配置为Vue项目运行的地址。


其中可以使用一些内置的变量和测试时显示的匹配组。例如这里的{REQUEST_URI}是完整URL中的路径部分(包括应用程序的路径),如果你的项目在站点下没有应用程序,使用匹配组变量({R:1}等格式的)就能满足需求。这里需要注意,匹配组中是否包含/不要写多了。

中间还有一个条件面板,其中可以对匹配成功的URL进一步地过滤。例如我想要代理的/ABC/MOBILE目录下有一些Aspx文件,访问/ABC/MOBILE时不能全部代理到前端,需要根据是否有对应的Aspx处理器进行排除,就可以在条件中设置,URL不以.aspx结尾的才进行反向代理。

Vite的配置

完成上面的配置后,就可以通过IIS反向代理访问前端网站了,但是会发现进入后白屏,控制台报错,有几个js文件404,看一下这些404的js文件的链接,发现是类似https://example.com.cn/src/main.js的地址,这显然不对,路径少了应用程序和反向代理匹配的部分/ABC/MOBILE,原因是index.html中引用js文件时,使用的是/开头的相对于站点根目录的路径。例如

<script type="module" src="/@id/virtual:vue-devtools-path:overlay.js"></script>
<script type="module" src="/@id/virtual:vue-inspector-path:load.js"></script>
<script type="module" src="/@vite/client"></script>
<script type="module" src="/src/main.js"></script>

这样访问路径是错的,肯定会报404。解决办法也简单,我们需要让vite知道网站根路径下/ABC/MOBILE/才是前端项目的路径。在vite.config.js中配置base: "/ABC/MOBILE/"即可。

IIS Web.config 放宽字符限制

完成上面的配置后,绝大部分的js文件已经正常加载出来了。但还有3个js文件报net::ERR_ABORTED 400 (Bad Request)它们的文件名如下:

/@id/virtual:vue-inspector-options
/@id/__x00__virtual:vue-devtools-options
/@id/__x00__plugin-vue:export-helper

仔细观察可以发现,它们的文件名中包含冒号:,默认情况下路径中包含< > * % & : \ ?的UR会被IIS阻止,需要修改Web.config来解决。修改站点或应用程序的Web.config文件,在httpRuntion标签中加上requestPathInvalidCharacters=""属性,即可。

<configuration>
    ...
    <system.web>
        ...
        <httpRuntime requestPathInvalidCharacters="" />
        ...
    </system.web>

使用IIS做反向代理,需要改的配置比Nginx略多且分散,好在是针对C# ASP.Net的项目,可以不用再另外开一个Nginx了。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇