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