1. 程式人生 > 實用技巧 >【應用服務 App Service】 App Service Rewrite 例項 -- 限制站點的訪問

【應用服務 App Service】 App Service Rewrite 例項 -- 限制站點的訪問

問題描述

在Azure App Service中,當需要限制某些特殊的情況對其進行訪問時候,可以通過IP限制邏輯程式碼判斷,或者Rewrite規則。通過IP限制則需要知道客戶端訪問的IP,而通過邏輯程式碼則需要對應用程式碼進行修改導致在部署才改動則會導致成本大增,所以可以有效的使用Rewrite規則來完成需求,比如當需要訪問目標站點B時候請求中必須攜帶password及正確的值才可以訪問(password=123456)。

IP限制

使用訪問限制可以定義一個按優先順序排序的允許/拒絕列表,用於控制在網路中對應用的訪問。該列表可以包含 IP 地址或 Azure 虛擬網路子網。如果存在一個或多個條目,則在列表末尾會存在一個隱式的“拒絕所有”。

訪問限制功能適用於所有應用服務託管工作負載,包括 Web 應用、API 應用、Linux 應用、Linux 容器應用和 Functions。

嚮應用發出請求時,將會根據訪問限制列表中的 IP 地址規則評估 FROM IP 地址。如果列表中的規則不允許訪問該地址,則服務會以“HTTP 403”狀態程式碼進行答覆。

如何配置Rewrite規則

通過 web.config檔案配置 rewrite 規則,並將該配置上傳到 Kudu站點site/wwwroot/目錄下。例如:如下的Web 應用 只允許 url 包含password=123456才能訪問配置。在 rewrite 下新增如下的配置:

<?
xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="role1" patternSyntax="ECMAScript" stopProcessing="true"> <match url=".*" negate="false" /> <
action type="CustomResponse" statusCode="403" statusReason="TypeInReasonHere" statusDescription="TypeInDescriptionHere" /> <conditions> <add input="{QUERY_STRING}" pattern="^.*password=123456.*$" negate="true" /> </conditions> </rule> </rules> </rewrite> </system.webServer> </configuration>

PS:以上匹配規則是對所有的請求URL的引數中是否包含password=123456,如不包含,則返回403. 測試效果如下:

參考資料

Azure 應用服務訪問限制https://docs.azure.cn/zh-cn/app-service/app-service-ip-restrictions#adding-and-editing-access-restriction-rules-in-the-portal

如何使用重寫規則限制 Azure Web 應用的網站訪問https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/aog-app-service-web-qa-config-permission-only-allow-specified-site-to-access

URL Rewrite Module Configuration Referencehttps://docs.microsoft.com/zh-cn/iis/extensions/url-rewrite-module/url-rewrite-module-configuration-reference