Nginx中的$document_uri與$request_uri以及$http_referer


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>";
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM