繁体   English   中英

Iis反向代理404

[英]Iis reverse Proxy 404

我们有一个由 .net 核心制成的 api 部署在服务器上,并在 iis 中配置了反向代理。

当我们从 swagger 或直接使用 ip 地址(例如 10.18.0.1/api/Call)测试 api 时,它工作正常。 但是,一旦我们使用反向代理,例如https://mywebsite.com/api/Call ,它就会返回 404 Not Found 错误。

端点实现了基本身份验证,接受 GET、POST 和 PUT 方法。 如果我尝试使用 DELETE 方法调用相同的 url,它会返回 401。

我真的不是 DevOps,我也不是这方面的知识渊博,所以非常感谢您的帮助。

==================================================== =========================更新:在入站规则上发现问题。 代码是这样的。

<rule name="InBound001" stopProcessing="true">
   <match url="^api/User/Profile(.*)" />
   <action type="Rewrite" url="http://10.18.1.1/api/User/Profile/{R:1}" />
</rule>

这是一个长期存在的规则,以前可以正常工作,但是,当将新规则添加到 web.config 时,就会发生错误。 请注意,之前也已经添加了新规则,但没有发生错误,这只是最近发生的。

删除操作 url 的 /Profile 之后的最后一个“/”后,此问题已得到修复。 url 被称为“http://myapp.com/api/User/Profile/Addess/1”、“http://myapp.com/api/User/Profile/123”等。

我想强调的是,在问题报告之前它工作正常,没有问题。 我只想了解为什么它突然无法正常工作并且在删除“/”时得到了修复。 我的预感是匹配 url 的原因,因为它没有“/”,但我不确定。 鉴于 (.*) 意味着匹配之后发生的任何事情,它不应该仍然匹配吗?

这是因为如果您按照 URL 重写, {R:1}将是/Address/1

在此处输入图像描述

而你重写的 URL 是:

http://10.18.1.1/api/User/Profile/{R:1}

所以最终改写的 URL 将如下所示:

http://10.18.1.1/api/User/Profile//地址/1

这将导致 URL 中出现额外的“/”。

解决方案:

解决方案1:修改匹配URL:

<rule name="InBound001" stopProcessing="true">
   <match url="^api/User/Profile/(.*)" />
   <action type="Rewrite" url="http://10.18.1.1/api/User/Profile/{R:1}" />
</rule>

解决方案2:修改动作URL:

<rule name="InBound001" stopProcessing="true">
   <match url="^api/User/Profile(.*)" />
   <action type="Rewrite" url="http://10.18.1.1/api/User/Profile{R:1}" />
</rule>

以上两种方案都可以解决这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM