簡體   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