IIS反向代理404

Iis reverse Proxy 404

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

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

端点有一个已实现的基本身份验证,接受 GET、POST 和 PUT 方法。如果我尝试使用 DELETE 方法调用相同的 url,它会 return 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//Address/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>

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