Setelah berjam-jam nginx
melayani file tunggal seperti robots.txt
(petunjuk: kosongkan cache browser Anda setiap kali), saya berakhir dengan dua cara berbeda, satu menggunakan alias directive, dan satu menggunakan directive root , seperti:
location /robots.txt { alias /home/www/static/robots.txt; }
location /robots.txt { root /home/www/static/; }
Apakah ada perbedaan fungsional antara keduanya? Atau masalah keamanan? Adakah konflik dengan arahan lain? (Keduanya tampak baik-baik saja dengan lokasi lain / statis). Atau ada alasan untuk memilih satu dari yang lain?
Catatan - Saya tidak menggunakan keduanya pada saat yang sama :) Sebaliknya saya mencoba masing-masing, satu per satu, dan keduanya bekerja. Saya tidak bertanya bagaimana mereka berdua berinteraksi bersama dalam file yang sama, tetapi mana yang lebih baik untuk digunakan.
=
dalam kedua kasus, benar? Atau apakah itu hanya berlaku untukroot
? Lihat juga hasil edit saya - saya tidak bermaksud menggunakan keduanya sekaligus. :)=
dalam kedua kasus.Ya, ada perbedaan: Dengan "alias" Anda bisa .. baik alias ke nama file lain, seperti
sedangkan
memaksa Anda untuk memberi nama file Anda di server juga robots.txt. Saya menggunakan opsi pertama karena saya ingin memberi nama file robot saya di server saya sebagai tld.domain.subdomain-robots.txt; misalnya
sumber
Saya pikir itu layak secara eksplisit menyatakan bahwa nginx beroperasi pada awalan dan bukan file per se. Dalam kasus pertama,
nginx menggantikan awalan string
/robots.txt
di jalur URL dengan/home/www/static/robots.txt
dan kemudian menggunakan hasilnya sebagai jalur sistem file. Diwakili sebagai kodesemu, ini akan menjadi sesuatu seperti:Jadi
/robots.txt
dilayani dari/home/www/static/robots.txt
karena/robots.txt
dilucuti dari/robots.txt
awalan adalah string kosong, dan menambahkan string kosong untuk/home/www/static/robots.txt
membiarkannya tidak berubah. Tetapi,/robots.txt1
akan dilayani dari/home/www/static/robots.txt1
dan/robots.txt/foobar
akan dilayani dari/home/www/static/robots.txt/foobar
. File-file itu mungkin tidak ada, menyebabkan nginx mengirim respons 404, dan kemungkinan iturobots.txt
bukan direktori, tapi nginx tidak tahu sebelumnya, dan ini semua didasarkan pada awalan string dan bukan apa yang tampak sebagai file atau direktori dengan tidak adanya atau adanya garis miring.Padahal, dalam kasus kedua,
nginx menyisipkan string
/home/www/static/
di awal jalur URL dan kemudian menggunakan hasilnya sebagai jalur sistem file. Dalam pseudocode, ini akan menjadi sesuatu seperti:Ini memiliki hasil yang sama persis dengan kasus pertama, tetapi karena alasan yang berbeda. Tidak ada stripping awalan, tetapi karena setiap jalur URI harus berisi awalan
/robots.txt
, maka jalur sistem file akan selalu dimulai dengan/home/www/static//robots.txt
yang setara dengan/home/www/static/robots.txt
.Tentu saja, kodesemu tidak cukup menceritakan keseluruhan cerita, seperti misalnya nginx tidak akan secara buta menggunakan jalur URL mentah seperti
/../../../etc/passwd
,try_files
arahan mengubah perilakuroot
/alias
, dan ada kendala di manaalias
dapat digunakan.sumber
Ada perbedaan, ketika alias untuk seluruh direktori.
akan bekerja, sementara
tidak akan melakukannya. Ini harus terjadi
(Mudah bingung)
sumber