Server HTTP Apache adalah proyek yang cukup besar — jauh lebih besar daripada, katakanlah, lighthttp
atau nginx
atau tentu saja "server HTTP sederhana" yang Anda lihat beredar di tutorial C / C ++.
Untuk apa kode tambahan itu? Apakah itu menambah keamanan / stabilitas (dan jika demikian, bagaimana?) Atau itu hanya untuk melakukan hal-hal seperti parsing conf
file Apache / .htaccess
ketik hal-hal (dan, saya kira, VirtualHosts
dll).
Saya meminta untuk tidak mengkritik Apache, tetapi karena saya tertarik untuk menulis semacam server web dan saya ingin mengetahui hal-hal yang, walaupun mungkin tidak jelas, penting untuk diingat untuk server web yang aman, stabil dan cepat.
Jawaban:
Ini jauh lebih kompleks karena:
Tetapi juga:
Yang sedang berkata, jawaban R. berisi poin yang valid tentang arsitekturnya dan mengapa beberapa web server lain juga mendapatkan ketenaran relatif. Tergantung pada apa yang Anda inginkan.
Anda mungkin juga ingin melihat /programming/475386/apache-vs-nginx-vs-lighttpd-which-is-simpler-to-configure-and-administer untuk bahan lainnya. Meskipun tidak secara langsung menjawab pertanyaan Anda, keseluruhan utas menunjukkan banyak perbedaan.
Jika tertarik untuk menulis server web dari awal, saya akan mengatakan mempelajari Apache httpd adalah hal yang baik, terutama jika Anda dapat melihat kembali bagaimana itu berkembang dari waktu ke waktu. Ini juga menunjukkan kepada Anda apa yang perlu Anda hindari (baik pada poin-poin yang dialamatkan dengan baik, dan tempat-tempat di mana itu mengungguli orang lain). Namun, kode ini mungkin agak rumit untuk memulai dan Anda mungkin lebih suka melihat server yang lebih kecil, lebih ringan untuk itu. Tetapi pelajari keseluruhan arsitekturnya dan bandingkan dengan yang lain.
sumber
Menurut pendapat pribadi saya itu semua karena semua fitur yang dimilikinya. Anda dapat melakukan hal-hal dengan Apache yang tidak dapat Anda lakukan sekarang dengan nginx atau lighthttpd. Apache sebenarnya adalah platform yang dikirimkan dengan dukungan HTTP. Anda dapat menerapkan hampir semua protokol seperti FTP atau SMTP (lihat mod_echo misalnya). Ini memiliki dukungan untuk filter yang memungkinkan Anda untuk mis .: melayani kode PHP dari basis data alih-alih file (karena mod_php adalah modul filter dan bukan pembuat konten). Ini mungkin tampak seperti ide yang tidak terlalu berguna, tetapi secara umum Anda dapat menggunakan filter untuk mengubah konten yang masuk atau keluar tanpa perlu men-tweak produsen konten asli. Ini memiliki tweak untuk klien HTTP yang tidak ada lagi, tetapi saat itu, Apache adalah satu-satunya cara untuk melayani mereka secara konsisten dan bebas bug. Banyak dari itu tidak digunakan saat ini.
Kode tambahan juga digunakan untuk keamanan, karena mod_log_forensics bersama dengan CoreDumpDirectory menyediakan alat nyata ketika Anda merasa seseorang mengeksploitasi kerentanan keamanan. Belum pernah mendengar tentang hal seperti itu dalam kasus server web lain. Adapun stabilitas, itu berasal dari inti yang dirancang dengan baik, bukan beberapa kode tambahan. Ada orang-orang di mailing list dev dev, yang disebut "penstabil inti". Mereka sangat pilih-pilih tentang perubahan inti dan cenderung mendorong mereka ke modul, yang sebenarnya membuat Apache cukup stabil. Jika gagal, sebagian besar waktu adalah kegagalan modul dan bukan bug di server inti.
sumber
Saya telah menggunakan Apache selama lebih dari dua belas tahun sebagai administrator dan pengembang untuk aplikasi web Perl, Python, dan Ruby yang besar. Apache adalah server web yang tangguh yang memiliki desain bersih / modular dan bengkok UNIX yang kuat. Salah satu fitur yang paling kuat adalah modularitasnya yang tipis dan dokumentasi yang baik. Ini adalah server web yang sangat mudah dikelola. Ini matang dan terbukti karena dapat dilihat dengan jelas oleh 15 tahun pangsa pasar yang dominan .
Walaupun dokumentasi pengguna sangat bagus, sayangnya ada sedikit dokumentasi berharga untuk pengembang / penulis modul, dan saya pikir ini cenderung sedikit menyakitkan karena tidak menarik sebanyak mungkin pengembang. Tapi itu sama sekali tidak berarti bahwa itu dirancang dengan buruk - hanya didokumentasikan dengan buruk dalam hal ini. Ada sebuah buku karya Nick Kew yang tampaknya menjadi sumber definitif untuk penulis modul. Tetapi alangkah baiknya jika proyek itu sendiri memiliki beberapa dokumentasi yang lebih baik tentang semua aspek modul penulisan.
Adapun itu over-engineered - omong kosong. Ini memiliki desain yang sangat baik. Ya, ada beberapa kutil di sana-sini, tetapi itu berlaku untuk semua perangkat lunak. Penggunaan kumpulan memori sangat fantastis, kemampuannya menyambungkan berbagai back-end berbicara tentang betapa bersih dan modularnya, ia memiliki C-API yang hebat, dan April membuat banyak hal lebih mudah, tidak hanya untuk proyek Apache untuk untuk pengembang dalam proyek lain. Jika Anda peduli tentang portabilitas, Anda akan menghargai April. Ini mungkin tidak sempurna, tetapi masih solid, dirancang dengan baik, dan sangat nyaman.
Dari sudut pandang berbagai fitur, fleksibilitas, administrasi, dukungan platform, skalabilitas, dokumentasi, dan kematangan, Apache adalah server web yang fantastis.
sumber
Ini over-desain / over-engineered. Terburuk dari semuanya, ia menggunakan APR (Apache Portable Runtime), lapisan mengasapi yang pada akhirnya menghabiskan banyak level panggilan fungsi dan alokasi memori dinamis dan membebaskan untuk mencapai yang setara dengan satu
printf
panggilan. Ini semua mengarah ke itu menjadi:sumber
mod_perl
daripada thttpd yang hanya menjalankan instance perl baru untuk setiap klien. Ini sudah lama sekali dan saya tidak pernah melakukan pengujian yang ketat untuk melacak semua penyebabnya; departemen baru saja membeli server baru ...