2011-05-13

【系統】Nginx : 用 Referer 或 IP 來擋盜連


前陣子,盜連的問題,突然很嚴重。
所以只好想辦法來檔一下了。
Nginx 提供了很簡單就可以防盜連的方法。
就簡簡單單的設定一下 nginx.conf 就好了。因為這些模組都是內建的。
方式如下:

    location /img/ {
        deny    192.168.1.1;
        allow   192.168.1.0/24;
        allow   10.1.1.0/16;
        deny    all;

        valid_referers none blocked *.my.domain dammit.com;
        if ($invalid_referer) {
            return 403;
        }
    }
referer 如果加上 none ,表示沒有 referer 也算是合法的。
可參考
HttpAccessModule

HttpReferModule
而我的需求比較麻煩一點。我還要判斷那個user agent 就可以過。
所以我的寫法大概會是有一堆 if ,亂寫一個 sample 如下。
    location /img/ {
        set $flag true;
        valid_referers blocked *.my.domain dammit.com;
        if ($invalid_referer) {
            set $flag false;
        }
        if ($http_user_agent ~ (iPad|iPhone|iPod)) {
            set $flag true;
        }

        if ($flag = false) {
            return 403;
        }
        if ($flag = true) {
            # do something ...
        }
    }
因為 nginx  的 if 功能有點簡單…

所以只好寫一大堆的 if, 這樣子,我就可以自行判斷,在那些例外的狀況下,就一定讓他執行。
End~~

0 comments:

張貼留言