Saya punya pengalaman menggunakan linux tetapi tidak ada yang menggunakan nginx. Saya telah ditugaskan untuk meneliti opsi load-balancing untuk server aplikasi.
Saya telah menggunakan apt-get untuk menginstal nginx dan semuanya tampak baik-baik saja.
Saya punya beberapa pertanyaan.
Apa perbedaan antara folder yang tersedia dengan folder dan folder conf.d. Kedua folder tersebut TERMASUK dalam pengaturan konfigurasi default untuk nginx. Tutorial menggunakan keduanya. Untuk apa mereka dan apa praktik terbaik?
Untuk apa folder dengan dukungan situs digunakan? Bagaimana saya menggunakannya?
Konfigurasi default merujuk pada pengguna data-www? Apakah saya harus membuat pengguna itu? Bagaimana cara saya memberikan izin optimal kepada pengguna untuk menjalankan nginx?
sumber
www-data
adalah topik yang terpisah. Sebagian besar sistem operasi mendefinisikan pengguna terpisah dengan izin yang lebih rendah yang dapat dijalankan oleh proses setelah mengikat ke port 80 sebagai root. Itu didefinisikan dalam file konfigurasi. Terapkan praktik keamanan dasar dari sana; jangan biarkan pengguna menulis apa pun yang tidak perlu ditulis server web, jangan biarkan pengguna lain menulis ke file kecuali itu disengaja.Jawaban:
Folder situs- * dikelola oleh
nginx_ensite
dannginx_dissite
. Untuk pengguna Apache httpd yang menemukan ini dengan pencarian, padanannya adalaha2ensite
/a2dissite
.The
sites-available
folder untuk menyimpan semua konfigurasi vhost Anda, apakah atau tidak mereka sedang diaktifkan.The
sites-enabled
folder berisi symlink ke file dalam folder sites-available. Ini memungkinkan Anda untuk menonaktifkan vhosts secara selektif dengan menghapus symlink.conf.d
melakukan pekerjaan, tetapi Anda harus memindahkan sesuatu dari folder, menghapusnya, atau membuat perubahan ketika Anda perlu menonaktifkan sesuatu. Abstraksi folder situs * membuat segalanya menjadi lebih teratur dan memungkinkan Anda untuk mengelolanya dengan skrip dukungan terpisah.(kecuali jika Anda seperti saya, dan satu dari banyak admin debian yang baru saja mengelola symlink secara langsung, tidak mengetahui tentang skrip ...)
sumber
sites-available|sites-enabled
adalah Debian-isme dan bukan sesuatu yang dilakukan nginx atau Apache. Itu mungkin cukup berguna di masa lalu, tetapi utilitasnya agak terbatas di zaman manajemen konfigurasi dan wadah.nginx.conf
tanpa kehilangan keterbacaan. Ini bertentangan dengan pendekatan dari beberapa tahun yang lalu ketika server biasanya akan menyimpan puluhan situs web.Saya ingin menambahkan jawaban sebelumnya bahwa yang paling penting bukanlah bagaimana Anda memanggil direktori (meskipun itu adalah konvensi yang sangat berguna), tetapi apa yang sebenarnya Anda masukkan
nginx.conf
. Contoh konfigurasi:Satu-satunya arahan yang digunakan di sini adalah termasuk , jadi tidak ada perbedaan internal antara misalnya
conf.d/
dansites-enabled/
.Dari dokumentasi di atas:
Jadi, untuk menjawab pertanyaan awal: tidak ada perbedaan internal, dan Anda dapat menggunakannya sebaik mungkin, mengingat nasihat dari jawaban lain. Dan tolong, jangan lupa untuk memilih jawaban yang 'benar'.
sumber
sites-enabled
telah sedikit diciptakan oleh beberapa pembedaan, fuzzing sekitar sebagai perantara tidak. Pergi ambil nginx dari sumber resmi : Anda akan mendapatkan produk terbaru, serta menyingkirkan konfigurasi omong kosong / neraka ini.Biasanya,
sites-enabled
folder digunakan untuk definisi host virtual, sementaraconf.d
digunakan untuk konfigurasi server global. Jika Anda mendukung beberapa situs web - mis., Host virtual - maka masing-masing mendapatkan file sendiri, sehingga Anda dapat mengaktifkan dan menonaktifkannya dengan sangat mudah dengan memindahkan file masuk dan keluar darisites-enabled
(atau membuat dan menghapus symlink, yang mungkin ide yang lebih baik).Gunakan
conf.d
untuk hal-hal seperti memuat modul, file log, dan hal-hal lain yang tidak spesifik untuk satu host virtual.Anda harus menjalankan nginx sebagai pengguna non-root. Ini dalam beberapa kasus bernama
www-data
, tetapi Anda dapat memberi nama apa pun yang Anda inginkan.Saya kurang yakin dengan jawaban untuk pertanyaan ini (saya tidak menjalankan nginx saat ini), tetapi jika itu seperti Apache jawabannya adalah bahwa
www-data
pengguna hanya perlu izin baca untuk file statis apa pun (dan baca + jalankan pada direktori ) bahwa Anda melayani, atau membaca / mengeksekusi izin pada hal-hal seperti skrip CGI, dan tidak ada izin di tempat lain.sumber
root
dan ada semacam kompromi jarak jauh, penyerang segera memiliki akses penuh ke sistem. Saat dijalankan sebagai pengguna yang tidak memiliki hak, akses administratif hanya akan tersedia dalam kombinasi dengan semacam eksploitasi lokal.Apa yang sedang terjadi?
Anda harus menggunakan Debian atau Ubuntu, karena iblis
sites-available
/sites-enabled
logika tidak digunakan oleh kemasan hulu nginx dari http://nginx.org/packages/ .Dalam kedua kasus, keduanya diimplementasikan sebagai konvensi konfigurasi dengan bantuan
include
arahan standar di/etc/nginx/nginx.conf
.Berikut cuplikan dari
/etc/nginx/nginx.conf
paket hulu resmi nginx dari nginx.org:Berikut cuplikan
/etc/nginx/nginx.conf
dari Debian / Ubuntu :Jadi, dari sudut pandang NGINX, satu-satunya perbedaan adalah bahwa file dari
conf.d
dapat diproses lebih cepat, dan, dengan demikian, jika Anda memiliki konfigurasi yang secara diam-diam bertentangan satu sama lain, maka dari yangconf.d
mungkin lebih diutamakan daripada yang masuksites-enabled
.Praktik Terbaik Adalah
conf.d
.Anda harus menggunakan
/etc/nginx/conf.d
, karena itu adalah konvensi standar, dan harus bekerja di mana saja.Jika Anda perlu menonaktifkan situs, cukup ganti nama file menjadi tidak lagi memiliki
.conf
akhiran, sangat mudah, langsung dan bukti kesalahan:sudo mv -i /etc/nginx/conf.d/default.conf{,.off}
Atau sebaliknya untuk mengaktifkan situs:
sudo mv -i /etc/nginx/conf.d/example.com.conf{.disabled,}
Hindari
sites-available
& Apasites-enabled
Pun Biaya.Saya sama sekali tidak melihat alasan untuk menggunakan
sites-available
/sites-enabled
:Beberapa orang telah menyebutkan
nginx_ensite
dannginx_dissite
skrip - nama skrip ini bahkan lebih buruk daripada sisa bencana ini - tetapi skrip ini juga tidak ditemukan - mereka tidak ada dalamnginx
paket bahkan di Debian (dan mungkin di Ubuntu juga) , dan tidak hadir dalam paket mereka sendiri, juga, plus, apakah Anda benar-benar membutuhkan skrip pihak ketiga yang tidak standar untuk hanya memindahkan dan / atau menautkan file di antara dua direktori ?!Dan jika Anda tidak menggunakan skrip (yang sebenarnya merupakan pilihan cerdas seperti di atas), maka muncul masalah bagaimana Anda mengelola situs:
sites-available
kesites-enabled
?sites-enabled
?Di atas mungkin tampak seperti beberapa masalah kecil untuk diatasi, sampai beberapa orang mulai mengelola sistem, atau sampai Anda membuat keputusan cepat, hanya untuk melupakannya berbulan-bulan atau bertahun-tahun ...
Yang membawa kita ke:
Apakah aman menghapus file
sites-enabled
? Apakah itu tautan lunak? Tautan yang sulit? Atau satu-satunya salinan konfigurasi? Contoh utama dari konfigurasi neraka.Situs mana yang telah dinonaktifkan? (Dengan
conf.d
, lakukan pencarian inversi untuk file yang tidak diakhiri dengan.conf
-find /etc/nginx/conf.d -not -name "*.conf"
, atau gunakangrep -v
.)Tidak hanya semua hal di atas, tetapi juga perhatikan
include
arahan khusus yang digunakan oleh Debian / Ubuntu -/etc/nginx/sites-enabled/*
- tidak ada akhiran nama file yang ditentukan untuksites-enabled
, tidak seperti untukconf.d
./etc/nginx/sites-enabled
, dan Andaemacs
membuat file cadangan sepertidefault~
, maka, tiba-tiba, Anda memiliki keduanyadefault
dandefault~
dimasukkan sebagai konfigurasi aktif, yang, tergantung pada arahan yang digunakan, bahkan mungkin tidak memberikan Anda mendapat peringatan, dan menyebabkan sesi debug yang berkepanjangan terjadi. (Ya, itu memang terjadi pada saya; itu selama hackathon, dan saya benar-benar bingung mengapa conf saya tidak berfungsi.)Jadi, saya yakin itu
sites-enabled
adalah kejahatan murni!sumber
sites-enabled
itu cukup jahat!sites-enabled
, namun kemudian orang lain memutuskan untuk menonaktifkannya dengan menghapusnya, mungkin berpikir itu hanya sebuah symlink, yang memerlukan dump memori berikutnya dari nginx heap untuk memulihkan file conf: stackoverflow.com/q/45852224/1122270sites-available
dansites-enabled
; penting untuk dapat menyiapkan file konfigurasi di luar direktori pickup 'live' sehingga jika nginx dimuat ulang atau dimulai ulang sehingga tidak akan mengambil sebagian file konfigurasi. Ini juga dapat berguna untuk menyimpan file konfigurasi yang tidak lagi digunakan secara aktif. Membuat symlink bukanlah tugas yang sulit jika Anda memiliki cukup pengalaman untuk mengelola nginx sejak awal, IMO.USR1
, yang membuka kembali log, tidak memuat ulang conf.) Saya menemukan komentar "pengalaman" symlink Anda salah arah - masalahnya adalah masalah konsistensi, yang tidak ada hubungannya dengan pengalaman.