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

Nginx基於$document_uri的訪問控制,變量$document_uri該變量等價於$uri,其實也等價於location匹配。php

示例1: 當用戶請求的url中包含/admin/時,直接返回403,注意:if結構中不支持使用allow和denyhtml

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和denynginx

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中的參數進行控制。bash

示例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代碼。
url

if ($http_referer ~ 'baidu.com')
{
    return 404;
}

#或者

if ($http_referer ~ 'baidu.com')
{
    return 200 "<html><script>window.location.href='//$host$request_uri';</script></html>";
}
相關文章
相關標籤/搜索