Site icon Saksenengku Network

Konfigurasi PHP-FPM dengan NGINX

Nginx & PHP-FPM

PHP-FPM (FastCGI Process Manager) adalah alternatif implementasi FastCGI dari PHP dengan beberapa fitur tambahan yang berguna untuk situs dengan lalu lintas tinggi.
Ini adalah metode yang disukai untuk memproses halaman PHP dengan NGINX dan lebih cepat daripada metode berbasis CGI tradisional seperti SUPHP atau mod_php untuk menjalankan skrip PHP.
Keuntungan utama menggunakan PHP-FPM adalah menggunakan memori dan CPU yang jauh lebih sedikit dibandingkan dengan metode lain untuk menjalankan PHP.
Alasan utamanya adalah demonize PHP, sehingga mengubahnya menjadi proses latar belakang sambil menyediakan skrip CLI untuk mengelola permintaan PHP.

Konfigurasi PHP-FPM NGINX

– Anda dapat membuka sesi SSH ke sistem Debian 11 / Ubuntu 18.04 Anda menggunakan root atau pengguna yang mendukung sudo.
– Anda telah menginstal NGINX dan PHP di sistem Debian 11 / Ubuntu 18.04 Anda.

Langkah-langkah Konfigurasi NGINX PHP-FPM

– Instal PHP-FPM
– Konfigurasi Kolam PHP-FPM
– Konfigurasi NGINX untuk PHP-FPM
– Uji Konfigurasi NGINX PHP-FPM

1. Instal PHP-FPM

Nginx tidak tahu cara menjalankan skrip PHP sendiri. Dibutuhkan modul PHP seperti PHP-FPM untuk mengelola skrip PHP secara efisien.
PHP-FPM, di sisi lain, berjalan di luar lingkungan NGINX dengan membuat prosesnya sendiri. Oleh karena itu, ketika pengguna meminta halaman PHP, server nginx akan meneruskan permintaan tersebut ke layanan PHP-FPM menggunakan FastCGI. Pemasangan php-fpm di Debian 11 / Ubuntu 18.04 bergantung pada PHP dan versinya. Periksa dokumentasi PHP yang diinstal sebelum melanjutkan dengan menginstal FPM di server Anda. Dengan asumsi Anda sudah menginstal PHP 8.0 terbaru, maka Anda dapat menginstal FPM menggunakan perintah apt-get berikut.

# apt-get install php8.0-fpm

Layanan FPM akan dimulai secara otomatis, setelah penginstalan selesai. Anda dapat memverifikasi itu menggunakan perintah systemd berikut:

# systemctl status php8.0-fpm
● php8.0-fpm.service - The PHP 8.0 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php8.0-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2022-02-17 06:29:31 UTC; 30s ago
     Docs: man:php-fpm8.0(8)
 Main PID: 24210 (php-fpm8.0)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
    Tasks: 3 (limit: 1152)
   CGroup: /system.slice/php8.0-fpm.service
           ├─24210 php-fpm: master process (/etc/php/8.0/fpm/php-fpm.conf)
           ├─24235 php-fpm: pool www
           └─24236 php-fpm: pool www

2. Konfigurasi Kumpulan PHP-FPM

Layanan php-fpm membuat kumpulan default, konfigurasi (www.conf) yang dapat ditemukan di folder /etc/php/8.0/fpm/pool.d. Anda dapat menyesuaikan kumpulan default sesuai kebutuhan Anda. Tetapi merupakan praktik standar untuk membuat kumpulan terpisah agar memiliki kontrol yang lebih baik atas alokasi sumber daya untuk setiap proses FPM. Selain itu, memisahkan kumpulan FPM akan memungkinkan mereka untuk berjalan secara mandiri dengan membuat proses masternya sendiri.
Itu berarti setiap aplikasi php dapat dikonfigurasi dengan pengaturan cache sendiri menggunakan PHP-FPM. Perubahan dalam konfigurasi satu kumpulan tidak mengharuskan Anda untuk memulai atau menghentikan kumpulan FPM lainnya. Mari kita buat kumpulan FPM untuk menjalankan aplikasi PHP secara efektif melalui pengguna terpisah. Untuk memulainya, buat pengguna baru yang akan memiliki hak eksklusif atas kumpulan ini:

# groupadd saksenengku_user
# useradd -g saksenengku_user saksenengku_user

Sekarang navigasikan ke direktori konfigurasi FPM dan buat file konfigurasi menggunakan editor teks favorit Anda seperti vi:

# cd /etc/php/8.0/fpm/pool.d
# vi saksenengku_pool.conf
[www]
user = saksenengku_user
group = saksenengku_user
listen = /var/run/php8.0-fpm-saksenengku-site.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
; Choose how the process manager will control the number of child processes. 
pm = dynamic 
pm.max_children = 75 
pm.start_servers = 10 
pm.min_spare_servers = 5 
pm.max_spare_servers = 20 
pm.process_idle_timeout = 10s

Opsi konfigurasi FPM di atas dan nilainya dijelaskan di bawah ini.
[www]: Nama kumpulan dan harus unik di semua nama kumpulan.
user and group: Pengguna dan grup tempat kumpulan akan dijalankan.
listen: Nama file soket untuk kumpulan ini ext:[127.0.0.5:9200].
listen.owner and listen.group: Harus cocok dengan pengguna dan grup tempat NGINX berjalan. Dalam kasus kami ini adalah www-data.
listen.allowed_clients: socket ini harus sesuai dengan listen [127.0.0.5]
php_admin_value: Memungkinkan untuk mengatur nilai konfigurasi php khusus.
php_admin_flag: Memungkinkan untuk mengatur flag boolean PHP.
pm: Pengaturan manajer proses dan nilainya Dinamis berarti jumlah proses anak diatur secara dynamic berdasarkan arahan berikut.
pm.max_children: Jumlah maksimum anak yang dapat hidup pada waktu yang sama.
pm.start_servers: Jumlah anak yang dibuat saat startup.
pm.min_spare_servers: Jumlah minimum anak dalam status ‘idle’ (menunggu untuk diproses). Jika jumlah proses menganggur kurang dari jumlah ini maka beberapa anak akan dibuat.
pm.max_spare_servers: Jumlah maksimal anak dalam keadaan diam (menunggu proses). Jika jumlah proses menganggur lebih besar dari jumlah ini maka beberapa anak akan dibunuh.
pm.process_idle_timeout: Jumlah maksimum proses server menganggur yang diinginkan. Digunakan hanya ketika nilai pm diatur ke dinamis. Terlepas dari pengaturan di atas, juga memungkinkan untuk meneruskan beberapa variabel lingkungan sistem ke layanan php-fpm menggunakan sesuatu seperti env[‘PHP_FOO’] = $bar. Misalnya, menambahkan opsi berikut di file konfigurasi di atas akan menetapkan nama host dan lokasi folder sementara ke lingkungan PHP.

...
...
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
...
...

Juga, pengaturan manajer proses dalam file konfigurasi kumpulan di atas diatur ke dynamic. Pilih pengaturan yang paling sesuai dengan kebutuhan Anda. Opsi konfigurasi lain untuk manajer proses adalah:
Statis: Sejumlah proses PHP tetap akan dipertahankan.
ondemand: Tidak ada anak yang dibuat saat startup. Anak-anak akan bercabang ketika permintaan baru diterima di server.

Setelah Anda selesai membuat file konfigurasi di atas, mulai restart layanan fpm untuk menerapkan pengaturan baru:

# systemctl start php8.0-fpm

FPM Pool akan segera dibuat untuk melayani halaman php. Ingat, Anda dapat membuat layanan systemd terpisah dengan menentukan file konfigurasi FPM di atas sehingga memungkinkan Anda untuk memulai/menghentikan kumpulan ini tanpa memengaruhi kumpulan lainnya.

3. Konfigurasikan NGINX untuk PHP-FPM

Sekarang buat blok server NGINX yang akan menggunakan FPM Pool di atas. Untuk melakukan itu, edit file konfigurasi NGINX Anda dan berikan path file socket pool menggunakan opsi fastcgi_pass inside location block for php.

server {
         listen       80;
         server_name  coba.saksenengkudev.com;
         root         /var/www/saksenengkudev;

         access_log /var/log/nginx/coba.saksenengkudev.com-access.log;
         error_log  /var/log/nginx/coba.saksenengkudev.com-error.log error;
         index index.html index.htm index.php;

         location / {
                      try_files $uri $uri/ /index.php$is_args$args;
         }

         location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php8.0-fpm-saksenengku-site.sock;
            fastcgi_index index.php;
            include fastcgi.conf;
    }
}

Pastikan pengaturan konfigurasi di atas benar secara sintaksis dan Restart NGINX.

# nginx-t
# systemctl restart nginx

4. Uji Konfigurasi PHP-FPM NGINX

Untuk menguji apakah file konfigurasi NGINX di atas memang menggunakan FPM Pool yang baru dibuat, buat file info php di dalam root web. Saya telah menggunakan /var/www/saksenengkudev sebagai root web pada file konfigurasi NGINX di atas. Sesuaikan nilai ini sesuai dengan lingkungan Anda.

Penutup

Kami mempelajari cara menginstal php-fpm dan mengonfigurasi Pool terpisah untuk pengguna dan aplikasi yang berbeda. Kami juga belajar cara mengonfigurasi blok server NGINX untuk terhubung ke layanan PHP-FPM. PHP-FPM memberikan keandalan, keamanan, skalabilitas, dan kecepatan bersama dengan banyak opsi penyetelan kinerja. Anda sekarang dapat membagi pool PHP-FPM default menjadi beberapa pool sumber daya untuk melayani aplikasi yang berbeda. Ini tidak hanya akan meningkatkan keamanan server Anda tetapi juga memungkinkan Anda untuk mengalokasikan sumber daya server secara optimal!.

Exit mobile version