<?xml version="1.0" encoding="utf-8"?>
|
<!--
|
IIS 站点级 web.config 示例:在「同一站点、80/443」上同时承载
|
- /board → Board ASP.NET Core(建议作为该站点下的「应用程序」物理路径指向发布目录,不由本文件反代)
|
- 其它路径 → 反向代理到本机 DataEase(如 http://127.0.0.1:8100)
|
|
使用前请安装:
|
- URL Rewrite 模块
|
- Application Request Routing(ARR),并在服务器节点启用 Proxy
|
|
重要说明:
|
- nginx 的 auth_request(子请求鉴权)在 IIS 中没有一行等价的内置指令。
|
- 本示例仅覆盖「路径分流 + 反代 DataEase + 转发头」。
|
- 若必须保留「访问 / 任意路径前必须先通过 /board/check/」的行为,见仓库说明或单独网关方案。
|
-->
|
<configuration>
|
<system.webServer>
|
<!-- 若反代路径含编码字符,按需开启 -->
|
<!--
|
<security>
|
<requestFiltering allowDoubleEscaping="true" />
|
</security>
|
-->
|
|
<rewrite>
|
<allowedServerVariables>
|
<!-- 需在 URL Rewrite「查看允许的服务器变量」中允许下列变量(或在 IIS 管理器中逐个添加) -->
|
<add name="HTTP_X_FORWARDED_HOST" />
|
<add name="HTTP_X_FORWARDED_FOR" />
|
<add name="HTTP_X_FORWARDED_PROTO" />
|
<add name="HTTP_X_ORIGINAL_URI" />
|
</allowedServerVariables>
|
|
<rules>
|
<!-- 1) /board 及其子路径:交给本站点下的 /board 应用程序处理(不要用反代覆盖) -->
|
<rule name="Board_App_SkipProxy" stopProcessing="true">
|
<match url=".*" />
|
<conditions logicalGrouping="MatchAll">
|
<add input="{REQUEST_URI}" pattern="^/board(/|$)" />
|
</conditions>
|
<action type="None" />
|
</rule>
|
|
<!-- 2) 其余请求:反代到 DataEase -->
|
<rule name="ReverseProxy_DataEase" stopProcessing="true">
|
<match url="(.*)" />
|
<conditions logicalGrouping="MatchAll">
|
<add input="{REQUEST_URI}" pattern="^/board(/|$)" negate="true" />
|
</conditions>
|
<serverVariables>
|
<set name="HTTP_X_FORWARDED_HOST" value="{HTTP_HOST}" />
|
<set name="HTTP_X_FORWARDED_FOR" value="{REMOTE_ADDR}" />
|
<!-- HTTPS 站点请改为 https;纯 HTTP 保持 http -->
|
<set name="HTTP_X_FORWARDED_PROTO" value="http" />
|
<set name="HTTP_X_ORIGINAL_URI" value="{REQUEST_URI}" />
|
</serverVariables>
|
<action type="Rewrite" url="http://127.0.0.1:8100/{R:1}" />
|
<appendQueryString>true</appendQueryString>
|
</rule>
|
</rules>
|
|
<!-- 可选:把 DataEase 响应里指向 8100 的 Location 改回当前站点(按实际 Location 形态调整) -->
|
<!--
|
<outboundRules>
|
<rule name="Strip8100FromLocation" preCondition="IsRedirect">
|
<match serverVariable="RESPONSE_Location" pattern="^http://127\.0\.0\.1:8100/(.*)" />
|
<action type="Rewrite" value="https://{HTTP_HOST}/{R:1}" />
|
</rule>
|
<preConditions>
|
<preCondition name="IsRedirect">
|
<add input="{RESPONSE_STATUS}" pattern="^30[12]$" />
|
</preCondition>
|
</preConditions>
|
</outboundRules>
|
-->
|
</rewrite>
|
|
<!-- 反代时建议保留原始 Host,避免上游生成错误绝对 URL(在 ARR 服务器代理设置里也可勾选) -->
|
<proxy preserveHostHeader="true" reverseRewriteHostInResponseHeaders="true" />
|
</system.webServer>
|
</configuration>
|