技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

nginx配置文件location使用實(shí)例:屏蔽IP/屏蔽蜘蛛/防盜鏈/重寫/重定向等

作者:admin    時(shí)間:2022-9-6 20:19:42    瀏覽:

在上文《nginx.conf location 修飾符解釋及示例詳解》中,我們對nginx location有了一定的了解,在本文中,我們將繼續(xù)通過多個(gè)實(shí)例來了解location指令。

參數(shù)解釋

location [=|~|~*|^~] /uri/ { … }
  • = 開頭表示精確匹配。
  • ^~ 開頭表示uri以某個(gè)常規(guī)字符串開頭,理解為匹配 url路徑即可。nginx不對url做編碼,因此請求為/static/20%/aa,可以被規(guī)則^~ /static/ /aa匹配到(注意是空格)。
  • ~ 開頭表示區(qū)分大小寫的正則匹配。
  • ~* 開頭表示不區(qū)分大小寫的正則匹配。
  • !~!~*分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配 的正則。
  • / 通用匹配,任何請求都會匹配到。

location使用實(shí)例

1、普通重寫

location / { 
    if (!-e $request_filename) { 
        rewrite  ^(.*)$  /index.php?s=$1  last; 
        break;   
    } 
}

2、301重定向

server_name xxx.com www.xxx.com; 
if ($host ~* xxx.com) { 
    rewrite ^/(.*)$ http://www.xxx.com/$1 permanent; 
}

把所有不帶www的域名301永久重定向到帶www的域名。

3、http跳轉(zhuǎn)https

普通

rewrite ^(.*) https://www.xxx.com$1 permanent; 

有cdn

if ( $http_from_https != 'on' ){
     rewrite ^(.*) https://www.xxx.com$1 permanent;      
}

4、取消目錄執(zhí)行權(quán)限

location ~* ^/(uploads|templets|data)/.*.(php|php5)$ {
    deny  all;
}

5、屏蔽來源域名

location / {
    valid_referers www.baidu.com www.#;
    if ($invalid_referer){
        return 403;
    }
}

6、防盜鏈

location ~* \.(gif|jpg|png|webp)$ {
   valid_referers none blocked domain.com *.domain.com server_names ~\.google\. ~\.baidu\.;
   if ($invalid_referer) {
    return 403;
    #rewrite ^/ http://www.domain.com/403.jpg;
   }
   root /opt/www/image;
}

7、屏蔽IP地址

allow 1.1.1.2;
allow all;
deny all;
deny 1.1.1.2
 
location ^~ /xxx/xxx/xx/
{
      allow 172.0.0.1;
      allow xxx.xxx.0.0/8;#表示允許xxx.xxx.0.1 ~ xxx.xxx.255.254  
      allow xxx.0.0.0/16;#表示允許xxx.0.0.1 ~ xxx.255.255.254
      allow xxx.xxx.xxx.x; 
      deny all;
}

前端還有cdn情況

map $http_x_forwarded_for  $clientIp {
        ""      $remote_addr;
        ~^(?P<firstAddr>[0-9\.]+),?.*$  $firstAddr;
}
if ($clientIp ~* "127.0.0.1|127.0.0.2") {
   return 403;
   break;
}

8、屏蔽蜘蛛

if ($http_user_agent ~ "FeedDemon|JikeSpider|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms" )
{
  return 403;
}

9、禁止非GET|HEAD|POST方式的抓取

if ($request_method !~ ^(GET|HEAD|POST)$) {
  return 403;
}

語法總結(jié)

if語句

#判斷訪問域名:
if ($host ~* test.com)

#判斷user_agent:
 
if ($http_user_agent ~* "baiduspider" )

#判斷訪問來源域名:
 
valid_referers www.baidu.com;if ($invalid_referer){return 403;}

#判斷METHOD:
 
if ($request_method !~ ^(GET|HEAD|POST)$)

#判斷url中?后參數(shù):
if ($request_uri ~* ^/list.php\?([^_]+)(_[0-9]+)$)

#判斷url路徑地址:
 
if ($uri ~* ^/list.php\?([^_]+)(_[0-9]+)$)

#判斷ip:
 
if ($remote_addr ~* "127.0.0.1|127.0.0.2")

處理方式

#禁止訪問:
return 403; deny all;

#重定向到:
rewrite ^/(.*)$ http://www.test.com/$1 permanent; 

#重寫到:
rewrite  ^(.*)$  /index.php?s=$1  last; 

全局變量

$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query

總結(jié)

本文通過多個(gè)實(shí)例介紹了nginx中的location指令的用法,你還可以閱讀此文《nginx.conf location 修飾符解釋及示例詳解》了解更多有關(guān)nginx location的知識。

相關(guān)文章

標(biāo)簽: nginx  location  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */