GNU/Linux >> Belajar Linux >  >> Linux

Cara Mengonfigurasi PHP-FPM dengan NGINX

PHP-FPM (FastCGI Process Manager) adalah alternatif dari implementasi FastCGI 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 lebih sedikit memori dan CPU dibandingkan dengan metode lain dalam menjalankan PHP. Alasan utamanya adalah karena ia menjelekkan PHP, sehingga mengubahnya menjadi proses latar belakang sambil menyediakan skrip CLI untuk mengelola permintaan PHP.

Prasyarat Konfigurasi NGINX PHP-FPM

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

Langkah Konfigurasi NGINX PHP-FPM

  • Instal PHP-FPM
  • Konfigurasikan Kumpulan PHP-FPM
  • Konfigurasikan 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.

Instalasi php-fpm di Ubuntu 18.04 tergantung pada PHP dan versinya. Periksa dokumentasi PHP yang diinstal sebelum melanjutkan dengan menginstal FPM di server Anda. Dengan asumsi Anda telah menginstal PHP 7.3 terbaru, maka Anda dapat menginstal FPM menggunakan perintah apt-get berikut.


# apt-get install php7.3-fpm

Layanan FPM akan dimulai secara otomatis, setelah instalasi selesai. Anda dapat memverifikasinya menggunakan perintah systemd berikut:


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

2. Konfigurasi PHP-FPM Pool

Layanan php-fpm membuat kumpulan default, konfigurasi (www.conf) yang dapat ditemukan di /etc/php/7.3/fpm/pool.d map. 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.

Selanjutnya, memisahkan kumpulan FPM akan memungkinkan mereka untuk berjalan secara independen dengan membuat proses masternya sendiri. Itu berarti setiap aplikasi php dapat dikonfigurasi dengan pengaturan cache sendiri menggunakan PHP-FPM. Perubahan dalam satu konfigurasi 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 wordpress_user
# useradd -g wordpress_user wordpress_user

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


# cd /etc/php/7.3/fpm/pool.d
# vi wordpress_pool.conf
[wordpress_site]
user = wordpress_user
group = wordpress_user
listen = /var/run/php7.2-fpm-wordpress-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.

  • [situs_wordpress] :Nama kumpulan dan harus unik di semua nama kumpulan.
  • pengguna dan grup :Pengguna dan grup tempat kumpulan akan dijalankan.
  • dengarkan :Nama file soket untuk kumpulan ini.
  • listen.owner dan listen.group :Harus cocok dengan pengguna dan grup tempat NGINX dijalankan. Dalam kasus kami ini adalah www-data.
  • php_admin_value :Memungkinkan untuk menyetel nilai konfigurasi php khusus.
  • php_admin_flag :Memungkinkan untuk menyetel flag boolean PHP.
  • pm :Pengaturan manajer proses dan nilainya Dinamis berarti jumlah proses anak disetel secara dinamis berdasarkan arahan berikut.
  • pm.max_children :Jumlah maksimum anak yang dapat hidup pada saat yang sama.
  • pm.start_servers :Jumlah anak yang dibuat saat startup.
  • pm.min_spare_servers :Jumlah minimum anak dalam kondisi 'idle' (menunggu proses). Jika jumlah proses idle kurang dari jumlah ini maka beberapa anak akan dibuat.
  • pm.max_spare_servers :Jumlah maksimum anak dalam keadaan idle (menunggu proses). Jika jumlah proses idle lebih besar dari jumlah ini maka beberapa anak akan dibunuh.
  • pm.process_idle_timeout :Jumlah maksimum proses server menganggur yang diinginkan. Digunakan hanya jika nilai pm disetel ke dinamis.
  • Terlepas dari pengaturan di atas, juga dimungkinkan untuk melewatkan beberapa variabel lingkungan sistem ke layanan php-fpm menggunakan sesuatu seperti env['PHP_FOO'] = $bar .

    Misalnya, menambahkan opsi berikut dalam file konfigurasi di atas akan mengatur 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 dinamis. Pilih setelan yang paling sesuai dengan kebutuhan Anda.

    Opsi konfigurasi lain untuk manajer proses adalah:

  • Statis :Sejumlah proses PHP tetap akan dipertahankan.
  • sesuai permintaan :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 ulang layanan fpm untuk menerapkan pengaturan baru:


# systemctl start php7.3-fpm

Kumpulan FPM 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. Konfigurasi NGINX untuk PHP-FPM

Sekarang buat blok server NGINX yang akan menggunakan kumpulan FPM di atas. Untuk melakukannya, edit file konfigurasi NGINX Anda dan teruskan jalur file socket pool menggunakan opsi fastcgi_pass di dalam blok lokasi untuk php.


server {
         listen       80;
         server_name  example.journaldev.com;
         root         /var/www/html/wordpress;

         access_log /var/log/nginx/example.journaldev.com-access.log;
         error_log  /var/log/nginx/example.journaldev.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/php7.2-fpm-wordpress-site.sock;
            fastcgi_index index.php;
            include fastcgi.conf;
    }
}

Blok Server NGINX

Pastikan pengaturan konfigurasi di atas benar secara sintaksis dan mulai ulang NGINX.


# nginx-t
# systemctl restart nginx

4. Uji Konfigurasi NGINX PHP-FPM

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


# cd /var/www/html/wordpress
# echo "<?php echo phpinfo();?>" > info.php

Setelah Anda selesai membuat halaman info PHP, arahkan browser web favorit Anda ke sana.

Anda akan melihat bahwa nilai $_SERVER['USER'] dan $_SERVER['HOME'] variabel menunjuk ke wordpress_user dan /home/wordpress_user masing-masing yang kita atur dalam file konfigurasi FPM sebelumnya dan dengan demikian menegaskan bahwa NGINX melayani halaman php menggunakan kumpulan FPM yang kita inginkan.

Pengujian NGINX PHP-FPM

Ringkasan

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


Linux
  1. Cara Mengonfigurasi Nginx agar Bekerja dengan PHP melalui PHP-FPM

  2. Cara menginstal PHP 7.4 Dengan Nginx di Ubuntu 20.04

  3. Cara Mengkonfigurasi Nginx untuk Mengeksekusi PHP Menggunakan PHP-FPM

  1. Cara mengkonfigurasi SSL Cloudflare asal dengan Nginx

  2. Bagaimana cara mengkonfigurasi server log jarak jauh dengan rsyslog?

  3. Cara Mengaktifkan Nginx Dengan PHP-FPM Di Plesk

  1. Cara Menginstal WordPress dengan Nginx di CentOS 7

  2. Bagaimana Cara Menjalankan Beberapa versi PHP dengan Nginx di Ubuntu?

  3. Cara Menginstal PHP-FPM dengan Apache di Ubuntu 20.04