Dizine ve alt dizinlere erişimin nasıl kısıtlanacağı


42

"Testdir" dizinindeki herhangi bir dosyaya veya alt dizine erişimi kısıtlamam gerekiyor. Conf.

...
location ~* ^.+\.(jpg|txt)$ {
            root   /var/www/site;
        }
location /testdir {
        deny all;
        return 404;
        }
...

Yapılandırmamda / testdir / jpg_or_txt-files ile ilgili herhangi bir kısıtlama yok. Nasıl yapılır?


Benim deneyimlerime göre, konum işlevi yalnızca linux üzerinde nginx çalıştırırken düzgün çalışıyordur. Pencerelerde çalışırken, bunun işe yaramadığı konusunda sorun yaşadık ...
samsmith

Yanıtlar:


43

bir konum girişinde nginx'te birden fazla dizine erişimi kısıtlamak için

...
location ~ /(dir1|dir2|dir3) {
   deny all;
   return 404;
}
...

7
403'ü

12
Bu soruya hiç cevap vermiyor.

1
403'ü döndürmek, klasörün var olduğuna dair bir ipucu verir, 404, klasörün mevcut olduğuna dair hiçbir kanıt vermez
Don Wilson

23

Çünkü "reddet" direktifinin eşleşmeden önce "kök" direktifinin eşleşmesi mümkündür. Yönergelerinizin sırasını ters çevirin ve çalışması gerekir:

...
location /testdir {
  deny all;
  return 404;
}
location ~* ^.+\.(jpg|txt)$ {
  root   /var/www/site;
}
...

16

Testdir eşleşmesinin jpg / txt eşleşmesi yerine seçildiğinden emin olmak için aşağıdaki konumları kullanın:

location ^~ /testdir {
  deny all;
  return 404;
}
location ~* ^.+\.(jpg|txt)$ {
  root   /var/www/site;
}

Örnekte iki tür konumunuz var. location /testdirönek konumu, ve ~arasında tilde ( ) bulunmadığından .location/testdir

location ~* ^.+\.(jpg|txt)$bir regex konumudur ( *tilde hemen sonra bağlı olan büyük / küçük harfe duyarsız bir konum ). Gönderen nginx belgelerinde :

Belirli bir istekle eşleşen konumu bulmak için nginx önce önek dizeleri (önek konumları) kullanılarak tanımlanan konumları kontrol eder. Bunların arasında en uzun eşleşen öneki sahip konum seçilir ve hatırlanır. Ardından, düzenli ifadeler yapılandırma dosyasındaki görünüm sırasına göre kontrol edilir. Normal ifadelerin araştırması ilk eşleşmede sona erer ve karşılık gelen yapılandırma kullanılır. Düzenli bir ifadeyle eşleşme bulunmazsa, daha önce hatırlanan önek konumunun yapılandırması kullanılır.

Buradaki sorun, testdir konumunuzun hatırlanmasıdır, ancak daha sonra regex aşamasında, eşleşirken jpg / txt konumu seçilir. Dokümantasyondaki şu not, çözümümü (yukarıda verilen) temel alan şeydir:

En uzun eşleşen önek konumu “^ ~” değiştiricisine sahipse, normal ifadeler kontrol edilmez.


11
location /foo {
    deny all;
    return 404;
}

Bu, inkar nedeniyle her zaman bir 403 verecek ... Sunucunun bir 404 vermesini istediğinizde, sadece bir 404 döndürün ...

location /foo {
    return 404;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.