Nginx基於$document_uri的訪問控制,變量$document_uri該變量等價於$uri,其實也等價於location匹配。
示例1: 當用戶請求的url中包含/admin/時,直接返回403,注意:if結構中不支持使用allow和deny
if ($document_uri ~ "/admin/")
{
return 403;
}
#1. www.xuliangwei.com/123/admin/1.html 匹配
#2. www.xuliangwei.com/admin123/1.html 不匹配
#3. www.xuliangwei.com/admin.php 不匹配
示例2: 請求的uri為/admin.php時返回403狀態碼,直接返回403,注意:if結構中不支持使用allow和deny
if ($document_uri = /admin.php)
{
return 403;
}
#1. www.xuliangwei.com/admin.php 匹配
#2. www.xuliangwei.com/123/admin.php 不匹配
示例3: 請求的uri包含data或者cache目錄並且是php時,返回403狀態碼,直接返回403,注意:if結構中不支持使用allow和deny
if ($document_uri ~ '/data/|/cache/.*\.php$')
{
return 403;
}
#1. www.xuliangwei.com/data/123.php 匹配
#2. www.xuliangwei.com/cache1/123.php 不匹配
nginx基於$request_uri訪問控制,$request_uri比$docuemnt_uri多了請求的參數,主要是針對請求的uri中的參數進行控制。
示例1: \d{9,12}是正則表達式,表示9到12個數字,例如gid=1234567890就符號要求。
if ($request_uri ~ "gid=\d{9,12}")
{
return 403;
}
#1. www.xuliangwei.com/index.php?gid=1234567890&pid=111 匹配
#2. www.xuliangwei.com/gid=123 不匹配
Nginx基於$http_referer的訪問控制,
背景:網站被黑掛馬,搜索引擎收錄的網頁是有問題的,當通過搜索引擎點擊到網站時,卻顯示一個博彩網站。
由於查找木馬需要時間,不能馬上解決,為了不影響用戶體驗,可以針對此類請求做一個特殊操作。
比如,可以把從百度訪問的鏈接直接返回404狀態碼,或者返回一段html代碼。
if ($http_referer ~ 'baidu.com')
{
return 404;
}
#或者
if ($http_referer ~ 'baidu.com')
{
return 200 "<html><script>window.location.href='//$host$request_uri';</script></html>";
}