Tutorial Membangun Web Server dengan Nginx + PHP-FPM

Membangun web server dengan nginx dikombinasi dengan php-fpm tidaklah hal yang sulit untuk anda yang sering instalasi dan konfigurasi server, apalagi jika anda sering membaca dan ngelab tutorial yang ada di DigitalOcean, Tecmin, Server-World, How-to-Forge dsb. Auto Succes… Hhe…

Setelah beberapa tahun menggunakan apache sebagai web server untuk aplikasi-aplikasi web base, sekarang saya mulai tertarik dan memilih nginx sebagai web server untuk saya implementasikan di server development maupun production.

Nginx

Nginx (Engine X) adalah salah satu web server namun mempunyai performa tinggi dan dapat digunakan sebagai reverse proxy, load balancing, cache header, gzip dan masih banyak lagi.

Nginx e dibangun untuk mengatasi masalah 10K atau 10.000 Concurrent Connection (koneksi bersamaan) oleh pengguna.

Bayangkan kalau ada beberapa web server nginx yang di load balancing, tentu akan melebihi daripada 10K tadi. Hhe…

Mengapa memilih Nginx?

Aplikasi-aplikasi besar seperti BukaLapak, Tokopedia dll menggunakan nginx bro… Pasti menggunakan nginx sebagai garis pertamanya web server (reverse proxy / load balancing) maupun setelahnya sebagai web server standalone atau dibelakangnya.

Instalasi Nginx + PHP-FPM

Pada tutorial ini admin menyediakan instalasi pada Ubuntu Server 16.04 dan CentOS 7 Server.

Instalasi di Ubuntu Server 16.04

Update Sistem Ubuntu Server

$ sudo apt update

Instal Nginx

$ sudo apt install nginx

Instal PHP-FPM

$ apt install php7.0-fpm

Instalasi di CentOS 7 Server

Tambahkan repository epel

# yum install epel-release

Setting repository epel

# sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/epel.repo

Instal Nginx

# yum --enablerepo=epel -y install nginx

Instal PHP-FPM

# yum --enablerepo=epel -y install php php-mbstring php-pear php-fpm

Konfigurasi Nginx + PHP-FPM

Setelah instalasi selesai, selanjutnya kita lakukan beberapa konfigurasi supaya Nginx dan PHP-FPM berjalan dengan sebagiamana mestinya.

Ubuntu Server 16.04

Edit “server_name” di default server block Nginx

# nano /etc/nginx/sites-available/default

...
server_name lukmanlab.com www.lukmanlab.com;
...

Jalankan service nginx dan hidupkan services auto start

# systemctl start nginx 
# systemctl enable nginx 

Edit default server block Nginx untuk PHP-FPM

# nano /etc/nginx/sites-available/default
...
        ### Setelah index, tambahkan `index.php` pada bagian ini
        index index.php index.html index.htm index.nginx-debian.html;   

        ### Tambahkan bari berikut dibagian server
        location ~ \.php$ {
               include snippets/fastcgi-php.conf;
               fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }
...

Restart PHP-FPM dan Nginx

# systemctl restart php7.0-fpm nginx 

CentOS 7 Server

Edit “server_name” di file default server block

# vi /etc/nginx/nginx.conf
...
server_name lukmanlab.com www.lukmanlab.com;
...

Jalankan service nginx dan hidupkan services auto start

# systemctl start nginx 
# systemctl enable nginx 

Konfig PHP-FPM

# vi /etc/php-fpm.d/www.conf
...
### User = nginx
user = nginx
...
### group = nginx
group = nginx
...

Jalankan dan hidupkan services auto start PHP-FPM

# systemctl start php-fpm 
# systemctl enable php-fpm

Tambahkan script berikut pada default server block nginx

# vi /etc/nginx/nginx.conf
...
        ### Tambahkan dibagian "server"
        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO $fastcgi_path_info;
            include        fastcgi_params;
        }
...

Restart services Nginx.

# systemctl restart nginx 

Testing Konfigurasi PHP-FPM

Pada Ubuntu Server 16.04, buat file info.php di /var/www/html

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

Pada CentOS 7 Server, buat file info.php di /usr/share/nginx/html

# echo "<?php phpinfo() ?>" > /usr/share/nginx/html/info.php 

Harusnya jika berhasil akan seperi gambar berikut:

Welcome to nginx!
Testing PHP-FPM

Referensi:

About Ahmad Lukman Hakim 76 Articles
Admin LUKMANLAB, Network Engineer, System Administrator.