nginx的配置中不支持if條件的邏輯與&& 邏輯或|| 運算 ,並且不支持if的嵌套語法,不然會報下面的錯誤:nginx: [emerg] invalid condition。php
咱們能夠用變量的方式來間接實現。html
要實現的語句:nginx
view sourceprint?瀏覽器
if ($arg_unitid = 42012 && $uri ~/thumb/){ |
若是按照這樣來配置,就會報nginx: [emerg] invalid condition錯誤。bash
能夠這麼來實現,以下所示:運維
view sourceprint?ide
if ($uri ~ ^/thumb/[0-9]+_160.jpg$){ |
if ($arg_unitid = 42012){ |
轉載請註明來自運維生存時間: http://www.ttlsa.com/html/3876.htmlspa
簡單防止重複URL 請求
.net
if ($request_uri ~ "xxx.php?xxx") {
set $iftmp Y;
}
if ($http_user_agent ~ "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)") {
set $iftmp "${iftmp}Y";
}
if ($iftmp = YY) { return 400;}
location / {
proxy_pass https://172.0.0.11;
}
重(www.111cn.net)點一 set $iftmp Y 將iftmp設置爲Y,set命令是一個大大的亮點
重點二 仍是set部分set $iftmp "${iftmp}Y" 在set裏面 ${iftmp}Y將參數疊加一次,${iftmp}是一個大大的亮點.
$request_uri是客戶端請求的完整請求路徑,$http_user_agent是用戶端發出請求的瀏覽器參數.
上面的if判斷是一個簡單防cc***的原型,通常普通的cc***會固定***頁面,而後瀏覽器參數也大多不變,當前兩個if參數同時知足後第三個if就直接返回給請求端400錯誤,
from:http://www.111cn.net/sys/nginx/45849.htm
code