Nginx Altında Hotlink Resim Koruması Nasıl Aktif Edilir?

Nginx Altında Hotlink Resim Koruması Nasıl Aktif Edilir?

Apache sunucusunu devre dışı bırakıp Nginx’e geçiş yapmak harika bir seçim fakat Nginx’e geçen her kullanıcının korkulu rüyası, .htaccess kodlarını Nginx’e uyarlamaktır. Bazı eklentiler zahmet çıkarmaz, çalışmaya devam eder ancak bazı özellikler ve eklentiler için ek düzenlemeler yapmanız gerekebilir. Mesela hotlink koruması için!

Nedir Hotlink Koruması?

Hotlink koruması, diğer web sitelerinin sizin web sitenizdeki dosyalara doğrudan bağlanmasını engelleyen bir özelliktir. Bunu genellikle jpg, png gibi görsellerimiz için kullanırız fakat js, css gibi dosyalarda da hotlink koruması kullanılabilmektedir.

Mesela birisi sizin ftp’nizdeki görseli doğrudan kendi sitesine mi ekledi? Hotlink koruması sayesinde bir süre sonra o dosyanın yerinde sizin belirlediğiniz görsel görüntülenmeye başlar. Durum böyle olunca hem trafiğinizi korumuş, hem de yazılarınızı çalanlara ufak bir zorluk çıkarmış olursunuz.

Tabi bu özellik Apache altında .htaccess dosyası ile harika şekilde çalışırken, Nginx altında conf dosyasında ufak bir değişikliğe ihtiyaç duymaktadır.

Nginx için Çalışan Hotlink Kodları!

Çalışan nginx kodlarını paylaşmadan önce, Apache altındaki .htaccess hotlink kodlarımı paylaşmak istiyorum.. Normalde hotlink kodlarımız şöyle oluyor;

RewriteEngine on
#referer i kontrol edelim
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(.+\.)?alanadim\.com [NC]
RewriteCond %{HTTP_REFERER} !^https://(.+\.)?facebook\.com [NC]
RewriteCond %{HTTP_REFERER} !^https://(.+\.)?google\.com [NC]
RewriteRule .*.(jpg|png|gif|css|js)$ https://www.alanadim.com/uyari.png [R,NC]

Yukarıdaki kodlar Apache altında işimizi gayet güzel görüyor ancak Nginx altında bu şekilde kullanamıyoruz. Nginx’e geçiş yaptıysak hotlink koruma kodlarımız şu şekilde oluyor;

location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
expires 7d;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
valid_referers none blocked ~.google. ~.yandex. ~.bing. ~.yahoo. ~twitter. ~facebook. ~pinterest. ~.alanadi1.com. ~alanadi2.com. server_names ~($host);
if ($invalid_referer) {
rewrite (.*)\.(jpg|jpeg|gif|png)$ https://www.alanadi.com/uyari.gif;
}
}

Yukarıdaki kodları kendi alan adımıza göre düzenliyor; birden fazla alan adımız varsa onları alanadi1, alanadi2 şeklinde ekliyor, ftp alanımıza uyari.gif adında bir gif dosyası yüklüyor ve son satırdaki alanadi.com kısmını da kendi alan adımıza göre düzenleyip, ilgili komutların hepsini aşağıdaki konumda yer alan nginx.conf dosyamıza, uygun bir yere yada siz nginx kodlarınızı nereye ekliyorsanız oraya ekleyip, nginx sunucumuzu yeniden başlatıyoruz.

Benim kullandığım nginx.conf dosyası konumu şu;

/var/www/vhosts/system/alanadi.com/conf

Nginx sunucusunu ssh altından şu komut ile yeniden başlatıyorum;

service nginx restart

Korumanın çalışıp çalışmadığının kontrolünü ise şu şekilde yapıyorum;

Sitemden bir görselin bağlantısını alıp, blogger.com üstündeki bir blog sayfasına post olarak ekliyorum. Ardından ctrl + f5 ile sayfayı yeniliyorum. Hotlink eğer aktif olduysa, anında o sitedeki görselin yerinde hotlink koruma görselim görüntülenmeye başlıyor.

Konuyla alakalı sorularınız yada daha pratik farklı yöntem önerileriniz olursa yorum olarak yazabilirsiniz.

>> Nginx Altında “Eski Url – Yeni Url” Yönlendirmesi Nasıl Yapılır?