Mengkonfigurasi PHP FPM dan Apache24 di FreeBSD
· 2 min read · Label UnixBSD
Server web Apache telah berevolusi selama bertahun-tahun untuk melayani berbagai kebutuhan dan tugas yang terkait dengan protokol HTTP/HTTPS. Seperti server web lainnya, Apache harus memecahkan satu masalah penting, yaitu bagaimana melayani berbagai proses untuk melayani permintaan protokol HTTP/HTTPS. Pekerjaan ini meliputi pembukaan soket, penanganan permintaan, menjaga koneksi tetap terbuka selama jangka waktu tertentu, penanganan kejadian baru yang terjadi pada koneksi tersebut, dan mengembalikan konten yang dihasilkan oleh program yang ditulis dalam bahasa tertentu (seperti PHP, Perl atau Python). Tugas-tugas ini dijalankan dan dikontrol oleh Modul Multi-Processing (MPM).
Hapus tanda "#" pada skrip di atas, listen = 192.168.5.2 adalah Alamat IP Server FreeBSD. Setelah berkas konfigurasi PHP-PFM utama diedit, lanjutkan dengan membuat berkas /usr/local/etc/apache24/Includes/php-fpm.conf dan ketik skrip di bawah ini pada berkas tersebut.
Buka file /usr/local/etc/php-fpm.d/www.conf, dan ubah skrip "listen = 192.168.5.2:9000" menjadi "listen = /tmp/php-fpm.sock".
Perhatikan baris ke-5 yang bertuliskan Server API FPM/FastCGI, yang berarti modul PHP-FPM SEDANG BERJALAN atau berjalan di server web apache24.
PHP-FPM adalah metode yang efisien untuk meminimalkan penggunaan memori dan meningkatkan kinerja situs web dengan lalu lintas yang padat. Metode ini jauh lebih cepat daripada metode berbasis CGI tradisional di lingkungan PHP multi-pengguna. Jika tujuan utama Anda adalah menghosting aplikasi web dan mencapai kinerja serta keamanan yang optimal, maka PHP-FPM adalah solusinya.
A. PGP-FPM Apache
Pada server Web Apache ada 3 MPM:- mpm_prefork: Proses baru dibuat untuk setiap koneksi masuk yang mencapai server. Setiap proses terisolasi dari yang lain, sehingga tidak ada memori bersama di antara mereka, bahkan jika mereka membuat panggilan yang identik di beberapa titik dalam eksekusinya. Metode ini adalah cara yang aman untuk menjalankan aplikasi yang ditautkan ke pustaka yang tidak mendukung multithreading, biasanya aplikasi atau pustaka yang lebih lama.
- mpm_worker: Proses induk bertanggung jawab untuk memulai kumpulan proses anak, beberapa di antaranya mendengarkan koneksi masuk baru, sementara yang lain menyajikan konten yang diminta. Setiap proses bersifat multi-utas (setiap utas menyajikan satu koneksi), sehingga satu proses dapat menangani beberapa permintaan sekaligus. Metode penanganan koneksi ini mendorong penggunaan sumber daya yang lebih baik sekaligus menjaga stabilitas. Ini adalah hasil dari kumpulan proses yang tersedia, yang sering kali memiliki utas bebas yang siap menyajikan koneksi baru dengan segera.
- mpm_event: Sementara proses-proses ini bergantung pada pekerjanya, MPM ini melangkah lebih jauh dengan mengoptimalkan cara proses induk menjadwalkan tugas untuk proses anak dan utas yang terkait dengannya. Secara default, koneksi tetap terbuka selama 5 detik dan ditutup jika tidak ada aktivitas baru yang terjadi. Proses ini adalah nilai default dari perintah keep-alive, yang menjaga aliran yang terkait dengannya. Peristiwa MPM memungkinkan suatu proses untuk mengelola utas sehingga beberapa utas bebas memproses koneksi masuk baru sementara yang lain tetap terikat pada koneksi langsung. Proses ini akan memungkinkan pendistribusian ulang tugas yang ditetapkan ke utas, sehingga meningkatkan penggunaan dan kinerja sumber daya.
Pada sistem FreeBSD, Apache24 secara default menggunakan prefork MPM (Multi-Processing Module). Dalam beberapa kasus, modul-modul ini sangat bagus dan menawarkan kompatibilitas terbaik, MPM memberikan kinerja yang lebih baik pada sebagian besar sistem. Namun, karena PHP tidak aman untuk thread, metode mod_php biasa (PHP sebagai modul Apache) hanya kompatibel dengan prefork.
Sebagai solusi, PHP-FPM (FastCGI Process Manager) adalah alternatif yang menyediakan daemon CGI yang dapat digunakan oleh versi Apache mana pun dan menawarkan manfaat kinerjanya sendiri dibandingkan mod_php biasa (PHP sebagai modul Apache).
PHP-FPM adalah manajer proses FastCGI untuk PHP. Protokol FastCGI didasarkan pada Common Gateway Interface (CGI), protokol yang dibuat antara aplikasi dan server web seperti Apache HTTP. Hal ini memungkinkan pengembang untuk menulis aplikasi secara terpisah dari perilaku server web. Program menjalankan prosesnya secara independen dan mentransfer produknya ke server web menggunakan protokol ini. Setiap koneksi baru yang perlu ditangani aplikasi akan membuat proses baru.
Dengan menggabungkan modul Apache HTTP MPM dengan PHP FastCGI Process Manager (PHP-FPM), situs web dapat dimuat lebih cepat dan menangani lebih banyak koneksi bersamaan dengan menggunakan lebih sedikit sumber daya.
Web Server: Apache24
Modul: PHP82 dan mod_php
Sebelum Anda melanjutkan membaca artikel ini, disarankan agar Anda membaca artikel sebelumnya yang membahas tentang konfigurasi dan instalasi apache24, PHP82 dan modul mod_php.
Sebagai solusi, PHP-FPM (FastCGI Process Manager) adalah alternatif yang menyediakan daemon CGI yang dapat digunakan oleh versi Apache mana pun dan menawarkan manfaat kinerjanya sendiri dibandingkan mod_php biasa (PHP sebagai modul Apache).
PHP-FPM adalah manajer proses FastCGI untuk PHP. Protokol FastCGI didasarkan pada Common Gateway Interface (CGI), protokol yang dibuat antara aplikasi dan server web seperti Apache HTTP. Hal ini memungkinkan pengembang untuk menulis aplikasi secara terpisah dari perilaku server web. Program menjalankan prosesnya secara independen dan mentransfer produknya ke server web menggunakan protokol ini. Setiap koneksi baru yang perlu ditangani aplikasi akan membuat proses baru.
Dengan menggabungkan modul Apache HTTP MPM dengan PHP FastCGI Process Manager (PHP-FPM), situs web dapat dimuat lebih cepat dan menangani lebih banyak koneksi bersamaan dengan menggunakan lebih sedikit sumber daya.
B. Spesifikasi Sistem
OS: FreeBSD 13.2Web Server: Apache24
Modul: PHP82 dan mod_php
Sebelum Anda melanjutkan membaca artikel ini, disarankan agar Anda membaca artikel sebelumnya yang membahas tentang konfigurasi dan instalasi apache24, PHP82 dan modul mod_php.
C. Mengkonfigurasi Apache24 dengan PHP-FPM
Berkas konfigurasi utama PHP-FPM terletak di folder /usr/local/etc/php-fpm.d/www.conf, edit berkas seperti pada contoh di bawah ini.root@ns1:~ # ee /usr/local/etc/php-fpm.d/www.conf
user = www
group = www
listen = 192.168.5.2:9000
listen.owner = www
listen.group = www
listen.mode = 0660
root@ns1:~ # ee /usr/local/etc/apache24/Includes/php-fpm.conf
<IfModule proxy_fcgi_module>
<IfModule dir_module>
DirectoryIndex index.php
</IfModule>
<FilesMatch "\.(php|phtml|inc)$">
SetHandler "proxy:fcgi://192.168.5.2:9000"
</FilesMatch>
</IfModule>
Script di atas adalah untuk mengaktifkan modul PHP-FPM. Yang perlu diperhatikan saat membuat script di atas adalah IP Address pada SetHandler harus sama dengan IP Address File /usr/local/etc/php-fpm.d/www.conf.
Inti dari konfigurasi PHP-FPM terletak pada file /usr/local/etc/apache24/httpd.conf. Edit beberapa script pada file tersebut dengan menghilangkan tanda "#" di depan file script /usr/local/etc/apache24/httpd.conf. Ikuti contoh di bawah ini untuk mengaktifkan modul PHP-FPM pada apache24.
root@ns1:~ # ee /usr/local/etc/apache24/httpd.conf
#LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
#LoadModule mpm_worker_module libexec/apache24/mod_mpm_worker.so
LoadModule authnz_fcgi_module libexec/apache24/mod_authnz_fcgi.so
LoadModule proxy_module libexec/apache24/mod_proxy.so
LoadModule proxy_http_module libexec/apache24/mod_proxy_http.so
LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
LoadModule proxy_scgi_module libexec/apache24/mod_proxy_scgi.so
Berdasarkan penjelasan di atas pada artikel ini, terdapat 3 modul MPM, Anda dapat memilih salah satu sesuai dengan kebutuhan. Pada artikel ini, modul yang digunakan adalah mpm_event. Setelah itu, lanjutkan dengan mengedit file /etc/make.conf dan masukkan skrip di bawah ini pada file /etc/make.conf.
root@ns1:~ # ee /etc/make.conf
WITH_MPM=event
HAPUS skrip di bawah ini pada file /usr/local/etc/apache24/httpd.conf
<FilesMatch "\.php$">SetHandler application/x-httpd-php</FilesMatch><FilesMatch "\.phps$">SetHandler application/x-httpd-php-source</FilesMatch>
D. Test PHP-FPM dan Apache24
Setelah semua konfigurasi di atas selesai, saatnya kita melakukan pengujian. Buat file pengujian dengan nama php.info dan masukkan skrip di bawah ini ke dalam file /usr/local/www/apache24/data/info.php.root@ns1:~ # ee /usr/local/www/apache24/data/info.php
<?php phpinfo(); ?>
Berikan hak kepemilikan pada berkas dan juga izin berkas.
root@ns1:~ # chown -R www:www /usr/local/www/apache24/data/info.php
root@ns1:~ # chmod +x /usr/local/www/apache24/data/info.php
Langkah selanjutnya adalah mengaktifkan modul PHP-FPM agar dapat berjalan secara otomatis. Edit file /etc/rc.conf dan masukkan skrip di bawah ini.
root@ns1:~ # ee /etc/rc.conf
php_fpm_enable="YES"
Sebelum kita melakukan pengujian, mulai ulang atau boot ulang server web apache24 dan PHP-FPM.
root@ns1:~ # service apache24 restart
Performing sanity check on apache24 configuration:
Syntax OK
Stopping apache24.
Waiting for PIDS: 2437.
Performing sanity check on apache24 configuration:
Syntax OK
Starting apache24.
root@ns1:~ # service php-fpm restart
Performing sanity check on php-fpm configuration:
[20-Aug-2023 13:20:07] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful
Stopping php_fpm.
Waiting for PIDS: 2105.
Performing sanity check on php-fpm configuration:
[20-Aug-2023 13:20:07] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful
Starting php_fpm.
Cara melakukan pengujian PHP-FPM adalah dengan mengetikkan Alamat IP Server FreeBSD, karena pada artikel ini server FreeBSD menggunakan IP 192.168.5.2, ketikkan Alamat IP tersebut pada Web Browser seperti Yandex atau Google Chrome, maka akan muncul hasil seperti gambar di bawah ini.
E. Apache24 PHP-FPM Dengan Soket Unix
Metode di atas adalah menghubungkan Apache ke server PHP-FPM menggunakan protokol TCP/IP. Pada bagian ini kita akan mempelajari cara menghubungkan server Apache ke server PHP-FPM menggunakan soket UNIX.Buka file /usr/local/etc/php-fpm.d/www.conf, dan ubah skrip "listen = 192.168.5.2:9000" menjadi "listen = /tmp/php-fpm.sock".
listen = 192.168.5.2:9000
change with
listen = /tmp/php-fpm.sock
Kemudian pada file /usr/local/etc/apache24/Includes/php-fpm.conf, ketik skrip di bawah ini.
<IfModule proxy_fcgi_module>
<IfModule dir_module>
DirectoryIndex index.php
</IfModule>
<FilesMatch "\.(php|phtml|inc)$">
SetHandler proxy:unix:/tmp/php-fpm.sock|fcgi://localhost/
</FilesMatch>
</IfModule>
Mulai ulang server apache dan server PHP-FPM
root@ns:~ # service apache24 restart
Performing sanity check on apache24 configuration:
Syntax OK
Stopping apache24.
Waiting for PIDS: 3258.
Performing sanity check on apache24 configuration:
Syntax OK
Starting apache24.
root@ns:~ # service php-fpm restart
Performing sanity check on php-fpm configuration:
[21-Nov-2023 20:57:00] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful
Stopping php_fpm.
Waiting for PIDS: 3211.
Performing sanity check on php-fpm configuration:
[21-Nov-2023 20:57:01] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful
Starting php_fpm.
PHP-FPM adalah metode yang efisien untuk meminimalkan penggunaan memori dan meningkatkan kinerja situs web dengan lalu lintas yang padat. Metode ini jauh lebih cepat daripada metode berbasis CGI tradisional di lingkungan PHP multi-pengguna. Jika tujuan utama Anda adalah menghosting aplikasi web dan mencapai kinerja serta keamanan yang optimal, maka PHP-FPM adalah solusinya.
Silahkan Berkomentar, Kakak...! Bunda...!
Posting Komentar