Saya ingin bertanya tentang metode konfigurasi PHP / Apache yang Anda tahu, pro dan kontra mereka. Saya akan mulai sendiri:
---------------- PHP sebagai modul Apache ----------------
Pro : kecepatan yang baik karena Anda tidak perlu memulai exe setiap kali terutama dalam mode mpm-pekerja . Anda juga dapat menggunakan berbagai akselerator PHP dalam mode ini seperti APC atau eAccelerator.
Cons : jika Anda menjalankan apache dalam mode mpm-worker, Anda mungkin menghadapi masalah stabilitas karena setiap kesalahan dalam skrip php apa pun akan menyebabkan ketidakstabilan ke seluruh rangkaian utas proses apache itu. Juga dalam mode ini semua skrip dieksekusi atas nama pengguna apache. Ini buruk untuk keamanan. konfigurasi mpm-worker membutuhkan PHP yang dikompilasi dalam mode thread-safe. Setidaknya repositori default CentOS dan RedHat tidak memiliki versi PHP thread-safe sehingga pada OS ini Anda perlu mengkompilasi setidaknya PHP sendiri (ada cara untuk mengaktifkan mpm pekerja di Apache). Penggunaan binari PHP aman-thread dianggap eksperimental dan tidak stabil. Plus, banyak ekstensi PHP tidak mendukung mode aman-thread atau tidak diuji dengan baik dalam mode aman-thread.
---------------- PHP sebagai CGI ----------------
Ini tampaknya merupakan konfigurasi default paling lambat yang tampaknya merupakan "penipu" itu sendiri;)
---------------- PHP sebagai CGI via mod_suphp ----------------
Pro : suphp memungkinkan Anda untuk mengeksekusi skrip php atas nama pemilik file skrip. Dengan cara ini Anda dapat memisahkan situs yang berbeda dengan aman di mesin yang sama. Juga, suphp memungkinkan untuk menggunakan file php.ini yang berbeda per host virtual.
Cons : PHP dalam mode CGI berarti lebih sedikit kinerja. Dalam mode ini Anda tidak dapat menggunakan akselerator php seperti APC karena setiap kali proses baru muncul untuk menangani skrip rendering cache dari proses sebelumnya yang tidak berguna. BTW, apakah Anda tahu cara menerapkan beberapa akselerator dalam konfigurasi ini? Saya mendengar sesuatu tentang menggunakan shm untuk cache bytecode php. Selain itu, Anda tidak dapat mengonfigurasi PHP melalui file .htaccess dalam mode ini. Anda perlu menginstal P ECL htscanner untuk ini jika Anda perlu mengatur berbagai opsi per-skrip melalui .htaccess (arahan php_value / php_flag)
---------------- PHP sebagai CGI via suexec ----------------
Konfigurasi ini terlihat sama dengan suphp, tapi saya dengar, itu lebih lambat dan kurang aman. Pro dan kontra yang hampir sama berlaku.
---------------- PHP sebagai FastCGI ----------------
Pro : Standar FastCGI memungkinkan proses php tunggal untuk menangani beberapa skrip sebelum proses php dimatikan. Dengan cara ini Anda mendapatkan kinerja karena tidak perlu memunculkan proses php baru untuk setiap skrip. Anda juga dapat menggunakan akselerator PHP dalam konfigurasi ini (lihat bagian kontra untuk komentar). Juga, FCGI hampir seperti suphp juga memungkinkan proses php dijalankan atas nama beberapa pengguna. mod_fcgid tampaknya memiliki dukungan fcgi paling lengkap dan fleksibilitas untuk apache.
Cons : Penggunaan php accelerator dalam mode fastcgi akan menyebabkan konsumsi memori tinggi karena setiap proses PHP akan memiliki cache bytecode sendiri (kecuali ada beberapa akselerator yang dapat menggunakan memori bersama untuk cache bytecode. Apakah ada seperti itu?). FastCGI juga sedikit rumit untuk dikonfigurasi. Anda perlu membuat berbagai file konfigurasi dan membuat beberapa modifikasi konfigurasi.
Tampaknya, fastcgi adalah konfigurasi PHP yang paling stabil, aman, cepat dan fleksibel, namun agak sulit untuk dikonfigurasi. Tapi, mungkin, saya melewatkan sesuatu?
Komentar dipersilahkan!
Tidak benar-benar menjawab pertanyaan Anda, tetapi saya tidak mendapatkan hal ini tentang FastCGI yang sulit dikonfigurasi. Berbeda dengan metode lain yang harus diganti (mod_php, mod_python, ...) sehingga mungkin diperlukan penulisan ulang sebagian kode. Itu bisa menjadi bagian yang sulit, tetapi untuk mengkonfigurasi Apache, setidaknya, saya menemukan itu mudah. Sebagai contoh, saya sedang menguji aplikasi WSGI dengan python, dan saya ingin melihat bagaimana kinerjanya dengan semua protokol yang didukung WSGI. Ini adalah file host virtual dengan konfigurasi untuk semua protokol (dengan
mod_fastcgi
):Sepertinya tidak rumit bagi saya. Tentu saja, FastCGI mendukung banyak opsi dan dapat di-tweak sampai mati, tetapi itu masalah lain.
Untuk menjalankan adalah sebagai pengguna yang berbeda, gunakan suexec dan
FastCGIWrapper
, maka itu menjadi:Dan lihat tautan ini untuk php.ini khusus, tetapi Anda harus dapat menentukannya dengan
-initial-env
opsi, yaitusumber
Kandidat yang baik adalah: Apache 2 ITK MPM
Telah bekerja untuk salah satu klien kami dengan sangat baik dengan ratusan VirtualHosts dengan pengunjung yang cukup banyak.
Anda mendapatkan semua Pro dari menjalankan PHP sebagai modul dan memilah-milah beberapa kontra.
sumber
Bagi saya, pertanyaannya adalah apa tujuan dari server web. Apakah ini melayani lebih dari satu host virtual? Jika demikian, maka Anda perlu mengorbankan kinerja untuk keamanan yang terisolasi. Ya kinerja memang menderita, tetapi dengan perangkat keras saat ini masih harus mengambil sedikit lalu lintas untuk membawa masalah kinerja utama.
Jika kinerja itu penting, jalankan satu situs di VPS atau server khusus dan konfigurasikan untuk kinerja.
sumber