Apache berjalan lambat dalam produksi. Setelah mencari jawaban untuk beberapa waktu, saya akhirnya pergi ke saluran #apache IRC dan pro meminta saya memeriksa mode apache dengan perintah ini:
sudo apachectl -V
dan terkejut menemukan bahwa Server MPM adalah prefork . Mereka dengan tegas mengatakan JANGAN GUNAKAN PREFORK PADA SERVER PRODUKSI. Ternyata, paket Ubuntu (mungkin diwarisi dari Debian?) Bersikeras menjalankan apache dalam mode prefork terlepas dari kenyataan bahwa metode yang direkomendasikan untuk menjalankan PHP dengan Apache dengan jelas merekomendasikan proxy_fcgi dan php-fpm, kemudian fcgid dan akhirnya mengatakan Anda tidak boleh gunakan prefork:
Mengapa Anda tidak harus menggunakan mod_php dengan prefork mpm lagi
- mod_php dimuat ke dalam setiap proses httpd sepanjang waktu. Bahkan ketika httpd menyajikan konten statis / non-php, memori itu sedang digunakan.
- mod_php bukan thread aman dan memaksa Anda untuk tetap dengan prefork mpm (multi-proses, tidak ada thread), yang merupakan konfigurasi paling lambat yang mungkin
Halaman itu juga berisi beberapa perincian tentang PHP-FPM tetapi ini tampaknya agak rumit dan tidak jelas dan tampaknya melibatkan banyak konfigurasi manual. Saya kecewa dan terkejut Ubuntu 16 tidak memiliki opsi paket untuk mode fastCGI atau sesuatu.
Saya mencoba mengalihkan apache ke mode acara menggunakan a2enmod dan ketika saya mencoba mem-apache kembali, saya mendapat kesalahan:
Apache menjalankan MPM berulir, tetapi Modul PHP Anda tidak dikompilasi untuk menjadi threadsafe. Anda perlu mengkompilasi ulang PHP
Bagaimanapun, saya bertanya-tanya apakah ada yang minimal, petunjuk langkah-demi-langkah untuk menjalankan mode fastCGI di Ubuntu 16 dengan PHP 7.0 dengan mengandalkan penginstal paket sebanyak mungkin. Saat ini saya sedang melihat banyak instruksi yang tidak jelas dan tidak jelas dan saya khawatir tentang memperbaiki lingkungan produksi saya dengan keputusan yang buruk.
Juga, seseorang harus menambahkan mpm-event sebagai opsi tag. Itulah yang direkomendasikan #apache IRC guys.
sumber
Jawaban:
ezra-s menyarankan pendekatan yang baik tetapi tidak menyertakan beberapa detail yang mungkin membingungkan bagi orang-orang yang mengandalkan manajer paket. CATATAN : Saya tidak yakin apakah langkah-langkah ini tepat. Jika ada yang mengalami masalah atau melihat masalah, beri tahu saya dan saya akan memperbarui pos ini.
Pertama, pada tulisan ini, paket apache2 Ubuntu bersikeras pada prefork jika Anda ingin menginstal PHP. Namun, jangan putus asa, karena Anda masih dapat menggunakan installer paket untuk menginstal dan memperbarui PHP dan apache2 dan masih membuat konfigurasi Anda bekerja dengan Apache dalam mode acara menggunakan PHP-FPM seperti yang direkomendasikan oleh wiki Apache dan dijelaskan secara lebih rinci dalam High- kinerja PHP di apache httpd 2.4.x menggunakan mod_proxy_fcgi dan php-fpm . Ide dasarnya adalah bahwa apache2 dan PHP-FPM berkomunikasi melalui soket daripada PHP yang berjalan sebagai modul Apache.
1) Hapus atau nonaktifkan modul Apache PHP
Karena paket Ubuntu bersikeras pada Apache prefork ketika menginstal PHP, kita harus memisahkannya. Saya melakukan ini dengan menggunakan apt untuk menghapus libapache2-mod-php7.0 karena saya tidak lagi memerlukan paket:
Sebagai alternatif, Anda mungkin menonaktifkan modul Apache php7.0 sebagai gantinya, tetapi ini tidak akan menghapus paket apt dari sistem Anda, yang meninggalkan kekesalan sistem yang mengganggu.
2) Alihkan Apache ke mode acara dan aktifkan fcgid
Saya percaya perintah ini harus melakukan trik:
3) Instal PHP-FPM
Saya sudah menginstal PHP 7 dengan berbagai modulnya, jadi saya hanya menginstal PHP-FPM dengan perintah ini:
4) Edit konfigurasi VirtualHost Anda untuk menangani file PHP dengan PHP-FPM:
Dalam kasus saya, saya mengedit host SSL default, /etc/apache2/sites-available/default-ssl.conf , dan menambahkan baris ini tepat di dekat bagian atas:
PENTING ini memerintahkan Apache untuk menangani permintaan file PHP dengan PHP-FPRM dan jalan di direktif ini ( /run/php/php7.0-fpm.sock ) harus sesuai dengan jalur yang ditetapkan oleh mendengarkan direktif di file / etc / php /7.0/fpm/pool.d/www.conf
5) Mulai ulang Apache
Untuk memeriksa apakah mode acara diaktifkan, gunakan perintah ini:
Dalam output, Anda akan melihat ini:
Cobalah membuat halaman phpinfo dan mengaksesnya di browser Anda. Anda akan melihat
Server API: FPM/FastCGI
di output.sumber
a2enconf /etc/apache2/conf-available/php7.3-fpm.conf; systemctl reload apache
dan ketika saya membuat file phpinfo.php dengan<?php phpinfo();
di dalamnya, baris Server API mengatakan FPM / FastCGI. BTW, saya menginstal php7.3 karena pada saat menulis posting ini, orang harus setidaknya berada di versi itu, jika tidak lebih tinggi, dan repositori apt untuk Ubuntu Server 19.10 Ubuntu naik ke php7.3 saat ini.Distro menawarkan metode "mod_php" untuk kenyamanan.
Sedangkan cara yang paling performan adalah apache dengan acara + mod_proxy_fcgi -> php-fpm.
Mungkin mereka harus memperbarui dengan waktu tetapi sulit bagi mereka ketika begitu banyak kerangka kerja datang dengan konfigurasi .htaccess mod_php dalam semacam mode "plug & play". Pada akhirnya, hanya admin yang bertanggung jawab untuk mengelola dan mengkonfigurasi situs mereka dengan benar.
Jika Anda dalam produksi, saya sarankan Anda menggunakan server uji untuk mempraktikkan peningkatan dan perubahan.
Tentang wiki yang saya sukai atau sarankan Anda metode "penangan". https://wiki.apache.org/httpd/PHP-FPM#Proxy_via_handler .
Yaitu, konfigurasikan php-fpm untuk memiliki soket yang siap dan dengan izin yang cukup bagi pengguna Apache untuk mengirim permintaan kepadanya dan konfigurasikan Apache untuk menggunakannya.
Contoh cepat:
Edit:
Dengan cara ini tidak masalah versi PHP yang Anda gunakan karena Apache tidak peduli, itu hanya akan membalikkan proxy permintaan yang sesuai ke php-fpm.
Juga, jangan lupa untuk membongkar mod_php agar dapat menggunakan mpm_event.
Edit 2:
Sesuai permintaan, Anda tidak perlu menghapus paket mod_php dari debian / ubuntu, Apache hanya peduli dengan konfigurasinya, jadi membongkar modul akan dilakukan.
sumber