Cara menggunakan configure php-fpm nginx

Memilih Nginx dengan Apache bukanlah perkara mudah, masing-masing punya kelebihan dan kekurangan. namun pada artikel sebelumnya saya menjelaskan alasan saya menggunakan Nginx disini. sebenarnya selain PHP-FPM ada mod_php dan Suphp. mod_php adalah salah satu module apache (httpd) sebagai engine untuk web server. PHP-FPM adalah module yang berhubungan dengan CGI dan FastCGI, perbedaan dengan mod_php adalah php-fpm menggunakan proses sendiri ketika menjalankan web berbasis php. Suphp biasanya digunakan pada CPanel dengan aturan yang sangat ketat, sehingga salah konfigurasi pada permission atau hal lain akan membuat error yang membingungkan.

Nginx Dengan PHP-FPM

Salah satu kelebihan Nginx adalah hemat memori, apalagi data yang diproses adalah file static, namun jika data yang diproses dinamis, maka nginx memerlukan bantuan aplikasi external seperti PHP-FPM yang memiliki proses sendiri. kombinasi Nginx dan PHP-FPM adalah hal yang ideal, walaupun bisa saja Nginx dengan mod_php atau Apache dengan PHP-FPM.

Installasi PHP dan Module PHP-FPM

sebelumnya install Nginx dulu ya, bisa ikuti langkah pada artikel Install Nginx (Engine X) pada server debian 9 stretch. nah selanjutnya kita install php, sesuai dengan judul php yang akan kita install adalah php 7. wait, php dan php-fpm apa bedanya? php adalah bahasa pemprograman, sedangkan php-fpm adalah module/engine web server untuk menjalankan script php. installasinya saya coba pada debian 9 stretch, berikut perintahnya :

#pertama update dulu package repository
sudo apt-get update

#install php 7.2
sudo apt-get install php7.2

#install php-cli dan php-fpm untuk php 7.2
sudo apt-get install php7.2-cli php7.2-fpm

#biasanya letaknya pada direktori '/etc/php/7.2/' coba dicek 
sudo ls /etc/php/7.2

#isi foldernya
apache2  cli  fpm  mods-available
install php 7.2

jika ada maka pada postingan selanjutnya kita akan melakukan beberapa konfigurasi untuk php-fpm di folder fpm tersebut. saat ini pembaca sudah sukses melakukan installasi php dan php-fpm

Installasi Module PHP lainnya

berikut adalah library yang biasanya digunakan aplikasi website berbasis PHP :

sudo apt-get install php7.2-gd php7.2-json php7.2-mysql php7.2-curl php7.2-mbstring
sudo apt-get install php7.2-intl php-imagick php7.2-xml php7.2-zip
install dependency php 7.2

Menghubungkan PHP-FPM dengan NGINX

pada saat proses installasi nginx, nginx akan membuat sebuah konfigurasi default di '/etc/nginx/sites-available/default' biasanya contoh konfigurasinya seperti ini :

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # SSL configuration
        #
        #listen 443 ssl default_server;
        #listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html/;
        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ index.html;
        }

        # pass PHP scripts to FastCGI server
        #
        #location ~ .php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
        #       fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /.ht {
        #       deny all;
        #}
}
nginx configuration

nah kita akan melakukan modifikasi pada konfigurasi nginx diatas agar dapat bekerja bersama dengan php-fpm, untuk melakukan testing buat file php terlebih dahulu pada root default di '/var/www/html' buat file misal index.php isikan perintah berikut :

<?php
   phpinfo();
?>
phpinfo

nah lalu kembali pada file konfigurasi nginx dan kita rubah menjadi seperti berikut ini :

server {
        #listen port 80 (http) sebagai default_server
        listen 80 default_server;
        listen [::]:80 default_server;

        #menentukan root folder nginx
        root /var/www/html/;

        #tambahkan index.php pada list dibawah ini agar nginx mendukung php
        index index.html index.php index.htm index.nginx-debian.html;

        #default server name adalah '_'
        server_name _;

        #jika ada request root website
        location / {
                # cari sesuai request $uri, jika ada akses $uri, jika tidak ada buka index.php$is_args$args
                try_files $uri $uri/ /index.php$is_args$args;
        }

        #aktifkan PHP scripts dengan FastCGI server
        location ~ .php$ {
               include snippets/fastcgi-php.conf;
               #php-fpm dengan unix sockets, sesuaikan dengan versi phpnya
               fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
               # jika pakai php-cgi atau tcp socket lainnya seperti berikut ini :
               # fastcgi_pass 127.0.0.1:9000;
               # cara diatas sesuai dengan settingan listen pada php pool, jika menggunakan tcp seperti misal port 9000, maka kita harus menyesuaikan pada konfigurasi php pool, akan dibahas pada artikel lain.
        }
}
nginx configuration

Setelah merubah jalankan perintah-perintah nginx berikut ini :

#cek apakah ada salah configurasi
sudo nginx -t

#jika output berikut
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

#maka tidak ada yang salah, tinggal lakukan perintah reload
sudo service nginx reload

#atau jika mau restart
sudo service nginx restart
nginx restart

Jika sudah anda bisa akses http://ip-address/index.php

M. Najamudin Ridha

Penikmat coffe latte ICE, apalagi tanpa gula. Menyukai teknologi open source, terutama yang berbasis web dan mobile, senang mencoba hal - hal seperti linux, DevOps, database dan programming