Mencegah hotlink konten pada Nginx

Bayangkan saja anda upload gambar dan ternyata ada yang langsung menyisipkannya website atau forum lainnya. Bukan masalah tidak diijinkan atau tidak etis, tapi efek yang terasa kalau konten tersebut malah lebih ramai dibuka di tempat lain adalah konsumsi bandwidthnya. Ini istilahnya ada hotlink dan bisa merugikan kita karena besar bandwidth dari hosting maupun VPS itu dibatasi pastinya.

Dulu saya pernah membahasnya untuk Apache dan sekarang adalah gilirannya Nginx. Karena salah satu klien saya butuh dan sekalian saja saya tuliskan tutorialnya. Hehe. 😀

Langkah pertama adalah mengedit konfigurasi Nginx dan kemudian tambahkan kode berikut:

location ~ \.(jpe?g|png|gif)$ {
     valid_referers none blocked nama_domain_saya.com *.nama_domain_saya.com;
     if ($invalid_referer) {
        return   403;
    }
}

Fungsi kode diatas adalah bahwa setiap konten (disini saya fokusnya pada gambar/foto) dengan ekstensi jpg, jpeg, png dan gif akan diblokir kalau diakses (referer header) bukan dari situs yang diijinkan.

Jangan lupa reload/restart Nginx setelahnya. 🙂

6 pemikiran pada “Mencegah hotlink konten pada Nginx

  1. mas chandra, kalau pakai fungsi di atas apakah harus instal module nginx ngx_http_referer_module atau sudah include default?
    http://nginx.org/en/docs/http/ngx_http_referer_module.html

    saya cek nginx -V muncul info berikut:

    nginx version: nginx/1.13.8
    built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)
    built with OpenSSL 1.1.1-dev  xx XXX xxxx
    TLS SNI support enabled
    configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --add-module=/tmp/nginx/ngx_brotli --with-openssl=/tmp/nginx/openssl --with-openssl-opt=enable-tls1_3 --add-module=/tmp/nginx/ngx_cache_purge --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

    trims sebelumnya.

Tinggalkan komentar