我有一台 IIS 服务器,它托管着许多站点和 API。这些站点包括 Confluence 和 Jira 实例。这些产品实际上运行着自己的 Web 服务器,因此应用程序请求路由和 URL 重写模块用于将传入请求反向代理到documents.example.com' and 'jira.example.com' to
localhost:8080 and
localhost:8090` - confluence 和 jira 实例正在运行的地方。
现在,我正在尝试设置一个小型简单存储服务器(s3)api(minio)的反向代理 - 托管在localhost:9000上 - 但s3协议要求主机头是其消息认证代码的一部分。
但是,当应用程序请求路由根据 URL 重写规则重新路由请求时,它也会重写主机标头以反映新的目标标头。
可以通过设置禁用此功能system.webServer.proxy:preserveHostHeaders
,但只能在 ApplicationHost.config 中禁用,因为 ARR 在服务器而不是站点级别运行。
所以现在我有一个难题:
如果我设置此设置,那么在其 MAC 中使用主机标头的 REST API 可以运行,但 Confluence 和 Jira 作为其支持的反向代理配置需要重写主机标头。
作为参考,此设置允许保留主机头
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost
答案1
我也遇到了同样的问题。我有一个解决方案,我不喜欢它(我敢打赌你也不会喜欢它),但它确实有效。
如果启用preserveHostHeaders,则可以添加出站URL重写规则,以重新映射以下所有情况:做想要替换主机头。