IIS 反向代理 支持 CORS 跨域

场景 :  第三方提供的接口不支持 CORS 的情况

 

之前用的nginx来解决这个问题,其实 IIS 也可以来玩玩

 

1.先决条件,安装以下两个IIS Module

 

  1.1  Application Request Routing

        

        https://www.iis.net/downloads/microsoft/application-request-routing

 

  1.2  URL Rewrite

 

        https://www.iis.net/downloads/microsoft/url-rewrite

        安装完成会多一个这个

        

 

 

 

 

2. 添加服务器变量,以支持负载均衡场景

     

 

 

 

   依次添加下面的服务器变量

     HTTP_THE_HOST
     HTTP_THE_SCHEME
     HTTP_X_FORWARDED_HOST
     HTTP_X_FORWARDED_PROTO

 

3. 创建 web.config 文件, 放入 IIS 站点根目录

 

   

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="OPTIONS" patternSyntax="Wildcard" stopProcessing="true">
          <match url="*" />
          <conditions logicalGrouping="MatchAny">
            <add input="{REQUEST_METHOD}" pattern="OPTIONS" />
          </conditions>
          <action type="CustomResponse" statusCode="204" subStatusCode="0" statusReason="" statusDescription="" />
        </rule>
        <rule name="INIT_SERVER_VARIABLE_FROM_PROXY" stopProcessing="false">
          <match url=".*" />
          <serverVariables>
            <set name="HTTP_THE_SCHEME" value="{HTTP_X_FORWARDED_PROTO}" replace="true" />
            <set name="HTTP_THE_HOST" value="{HTTP_X_FORWARDED_HOST}" replace="true" />
          </serverVariables>
          <action type="None" />
        </rule>
        <rule name="INIT_SERVER_VARIABLE_DEFAULT" stopProcessing="false">
          <match url=".*" />
          <conditions trackAllCaptures="true">
            <add input="{HTTPS}s" pattern="on(s)|offs" />
          </conditions>
          <serverVariables>
            <set name="HTTP_THE_SCHEME" value="http{C:1}" replace="false" />
            <set name="HTTP_THE_HOST" value="{HTTP_HOST}" replace="false" />
          </serverVariables>
          <action type="None" />
        </rule>
        <rule name="DocumentServerRewrite" enabled="true">
          <match url="^(.*)" />
          <conditions trackAllCaptures="true">
            <add input="{HTTPS}s" pattern="on(s)|offs" />
          </conditions>
          <serverVariables>
            <set name="HTTP_X_FORWARDED_PROTO" value="{HTTP_THE_SCHEME}" />
            <set name="HTTP_X_FORWARDED_HOST" value="{HTTP_THE_HOST}/documentserver-virtual-path" />
          </serverVariables>
          <action type="Rewrite" url="https://这里放你要转发的站点路径/{R:1}" logRewrittenUrl="false" />
        </rule>

      </rules>
      <outboundRules>
        <clear />
        <rule name="Set Access_Control_Allow_Origin for OPTIONS response">
          <match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
          <action type="Rewrite" value="{HTTP_ORIGIN}" />
        </rule>
        <rule name="Set Access-Control-Allow-Methods for OPTIONS response" patternSyntax="Wildcard">
          <match serverVariable="RESPONSE_Access-Control-Allow-Methods" pattern="*" negate="false" />
          <action type="Rewrite" value="{HTTP_Access-Control-Request-Method}" />
        </rule>
        <rule name="Set Access-Control-Allow-Headers for OPTIONS response" patternSyntax="Wildcard">
          <match serverVariable="RESPONSE_Access-Control-Allow-Headers" pattern="*" negate="false" />
          <action type="Rewrite" value="{HTTP_Access-Control-Request-Headers}" />
        </rule>
        <rule name="Set Access-Control-Allow-Credentials for OPTIONS response" patternSyntax="Wildcard">
          <match serverVariable="RESPONSE_Access-Control-Allow-Credentials" pattern="*" negate="false" />
          <action type="Rewrite" value="true" />
        </rule>
        <rule name="Set Access-Control-Max-Age for OPTIONS response" patternSyntax="Wildcard">
          <match serverVariable="RESPONSE_Access-Control-Max-Age" pattern="*" negate="false" />
          <action type="Rewrite" value="3600" />
        </rule>


      </outboundRules>

    </rewrite>
  </system.webServer>
</configuration>
复制代码

 

 

4. 替换 “这里放你要转发的站点路径” 为你要转发的地址

 

  

posted @   小小高  阅读(1521)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示