[英]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.