鍍金池/ 問答/Linux  網(wǎng)絡(luò)安全/ nginx配置防盜鏈rewrite跳轉(zhuǎn)到一張圖片但死循環(huán)的問題

nginx配置防盜鏈rewrite跳轉(zhuǎn)到一張圖片但死循環(huán)的問題

以下是nginx配置的代碼:

location ~ .*\.(jpg|png|gif|jpeg|swf|flv|rar|zip)$ {

            valid_referers none blocked my.weibo.com;
            # 該指令會根據(jù)Referer Header頭的內(nèi)容分配一個值為0或1給變量$invalid_referer。如果Referer Header頭不符合valid_referers指令設(shè)置的有效Referer,變量$invalid_referer將被設(shè)置為1.
            # none:表示無Referer值的情況;
            # blocked:代表有referer但是被防火墻或者是代理給去除了;
            # server_names:表示一個或多個主機名稱;

            if ($invalid_referer) {

                #return 403;

                rewrite ^/ http://my.weibo.com/no.png;
            }
        }

當(dāng)外部網(wǎng)址進行訪問的時候,讓其展示至目錄下的no.png圖片,于是出現(xiàn)死循環(huán)

clipboard.png

主要問題的根本是在顯示的no.png的時候,referer還是源站點的網(wǎng)址,所以導(dǎo)致顯示no.png的時候他也進入了那個條件中。

想問下這種情況可以解決么?還是我配置少寫了點什么?

回答
編輯回答
心悲涼

死循環(huán)了,所以要用location = /no.png來優(yōu)先匹配

location ~ .*\.(jpg|png|gif|jpeg|swf|flv|rar|zip)$ {
    valid_referers none blocked my.weibo.com;
    if ($invalid_referer) {
        rewrite ^/ /no.png redirect;
    }
}

location = /no.png {
    root /some/path/;
    expires 30d;
}
2018年8月27日 11:44