一、針對單一圖片的控制
若是圖片按照哈希結構放置,那麼用戶的圖片加鎖後要把每一張圖片都加上控制文件,若是該用戶圖片較多,寫入時稍嫌多些。
好比有一張圖:
/data/p_w_picpath/a/z/asdfqerqwegasd.jpg
寫上一個空文件:
/data/p_w_picpath/a/z/asdfqerqwegasd.jpg.lock
而後在nginx配置判斷:
location / {
root /data/p_w_picpath/;
if ( -f 「${request_filename}.lock」 )
{
#rewrite ^(.*)$ http://www.sudone.com/access.jsp?url=$1 last;
return 403;#test
}
}
root /data/p_w_picpath/;
if ( -f 「${request_filename}.lock」 )
{
#rewrite ^(.*)$ http://www.sudone.com/access.jsp?url=$1 last;
return 403;#test
}
}
這樣,只要在圖片旁邊有一個.lock文件,就會訪問到403 Forbidden;使用rewrite會將圖片連接和cookie定位到後端,由後端返回斷定結果X-Accel-Redirect頭或者重定向到另一個jsp去填密碼。
二、針對目錄的控制
若是圖片是按照目錄放置,那麼配置會稍微複雜一些。
location / {
root /data/p_w_picpath/;
if ( $request_filename ~ ^(.*)/[^/]*$ ){
set $dir $1;
}
if ( -f 「${dir}/lock」 )
{
#rewrite ^(.*)$ http://www.sudone.com/access.jsp?url=$1 last;
return 403;#test
}
}
root /data/p_w_picpath/;
if ( $request_filename ~ ^(.*)/[^/]*$ ){
set $dir $1;
}
if ( -f 「${dir}/lock」 )
{
#rewrite ^(.*)$ http://www.sudone.com/access.jsp?url=$1 last;
return 403;#test
}
}
首先用正則表達式取出圖片路徑的目錄,而後帶上控制文件名判斷此文件是否存在,這樣只要在圖片的目錄中放置一個名叫lock的空文件就能控制完整個目錄:
/data/p_w_picpath/a/z/lock
測試一下,效果不錯,只要控制文件存在,訪問馬上403;刪去控制文件,訪問正常。
分享技術快樂自我