Saya perlu membatasi akses ke file atau subdirektori dalam direktori "testdir". Conf saya:
...
location ~* ^.+\.(jpg|txt)$ {
root /var/www/site;
}
location /testdir {
deny all;
return 404;
}
...
Dalam konfigurasi saya, saya tidak memiliki batasan pada / testdir / jpg_or_txt-file. Bagaimana cara melakukannya?
Jawaban:
untuk membatasi akses ke beberapa direktori di nginx dalam satu entri lokasi lakukan
sumber
Itu karena arahan "root" cocok sebelum arahan "deny" dapat dicocokkan. Balikkan urutan arahan Anda dan itu akan berhasil:
sumber
Untuk memastikan bahwa kecocokan testdir dipilih sebagai ganti dari kecocokan jpg / txt, gunakan lokasi berikut:
Dalam contoh Anda, Anda memiliki dua jenis lokasi.
location /testdir
adalah lokasi awalan, karena tidak memiliki tilde (~
) antaralocation
dan/testdir
.location ~* ^.+\.(jpg|txt)$
adalah lokasi regex (yang case-insensitive, karena*
langsung setelah tilde). Dari dokumentasi nginx :Masalahnya di sini, adalah bahwa lokasi testdir Anda diingat, tetapi kemudian lokasi jpg / txt dipilih selama tahap regex, karena cocok. Catatan berikut dari dokumentasi adalah yang menjadi dasar solusi saya (diberikan di atas):
sumber
Ini akan memberi Anda 403 sepanjang waktu karena tolak semua ... Ketika Anda ingin server memberi Anda 404, cukup kembalikan 404 saja ... seperti:
sumber