Cara Install Nginx Web Server (Konfigurasi virtualhost) dan PHP di Debian Server

Instalasi

Jika sebelumnya sudah pernah install web server lain seperti Apache, nonaktifkan terlebih dahulu karena keduanya memakai nomor port yang sama yaitu 80 untuk protokol HTTP.systemctl stop apache2 systemctl disable apache2 systemctl status apache2

systemctl stop apache2systemctl disable apache2systemctl status apache2

Install Nginx.

apt install nginx -y

Uji hasil install Nginx dengan mengakses IP address server di web browser.

Kalau sebelumnya pernah install Apache web server, maka yang tampil adalah halaman default Apache. Hal ini terjadi karena direktori document root (direktori penyimpanan website) Nginx hasil install sama dengan document root Apache sebelumnya di direktori /var/www/html. Sementara document root default untuk Nginx berada di direktori /usr/share/nginx/html.

Konfigurasi

Setting Nginx Server Block (VirtualHost)

Selanjutnya setting Nginx server block, kalau di Apache web server digunakan istilah virtualhost, dalam satu server bisa memasang banyak nama domain/subdomain. Di sini saya akan membuat server block fariz.id dan anwar.id

Membuat direktori documen root

(1). Membuat direktori document root untuk fariz.id

mkdir -p /var/www/farizanwar.my.id

Untuk mengetes pengujian buat file html

nano /var/www/farizanwar.my.id/index.html

masukkan ini kedalamnya

<h1>selamat datang di farizanwar.my.id.</h1>

(2). Membuat direktori document root untuk anwar.id

mkdir -p /var/www/anwar.id

Untuk mengetes pengujian buat file html

nano /var/www/anwar.id/index.html

masukkan ini kedalamnya

<h1>selamat datang di anwar.id.</h1>

Konfigurasi sites-available dan sites-enable

Membuat file setting server block

Pergi ke direktori /etc/nginx/sites-available

1). Membuat file setting untuk server block farizanwar.my.id

cd /etc/nginx/sites-available
nano farizanwar.my.id.conf 

Isi dengan file setting server block. masukkan ini kedalamnya

server {
 listen 80;
 listen [::]:80;
 
 server_name www.farizanwar.my.id;
 root /var/www/farizanwar.my.id/;
 
 access_log /var/log/nginx/farizanwar.my.id.access.log;
 error_log /var/log/nginx/farizanwar.my.id.error.log warn;
}
 
# redirect dari non-www ke www.
server {
 listen 80;
 listen [::]:80;
 
 server_name .farizanwar.my.id;
 
 return 301 http://www.farizanwar.my.id$request_uri;
} 

2). Membuat file setting untuk server block anwar.id

nano anwar.id.conf

masukkan ini kedalamnya

server {
        listen 80;
        listen [::]:80;
 
        server_name www.anwar.id;
        root /var/www/anwar.id/;
 
        access_log /var/log/nginx/anwar.id.access.log;
        error_log /var/log/nginx/anwar.id.error.log warn;
}
 
# redirect dari non-www ke www.
server {
        listen 80;
        listen [::]:80;
 
        server_name .anwar.id;
 
        return 301 http://www.anwar.id$request_uri;
}
Membuat symbolic link

Aktifkan file setting server block yang telah dibuat dengan membuat simbolic link ke direktori /etc/nginx/sites-enabled.

ln -s /etc/nginx/sites-available/farizanwar.my.id.conf /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/anwar.id.conf /etc/nginx/sites-enabled/ 
Test syntax

Testing file setting nginx. (apakah ada error atau tidak)

nginx -t
Restart service Nginx
systemctl restart nginx
systemctl status nginx

Pengujian Server Block

Sebelum melakukan pengujian server block di PC client, terlebih dahulu memasukkan IP address server beserta nama domainnya ke dalam file hosts. Di Linux file hosts berada di /etc/hosts

Konfigurasi file /etc/hosts
nano /etc/hosts

masukkan ini kedalamnya, dan sesuaikan IP dengan IP yang kamu gunakan

192.168.100.1 www.farizanwar.my.id farizanwar.my.id
192.168.100.1 www.anwar.id anwar.id
Konfigurasi DNS server (bind9)

Ini sekaligus contoh konfigurasi 2 domain dalam 1 IP

Isi konfigurasi pada file /etc/bind/named.conf.local

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone    "farizanwar.my.id" {
         type master;
         file "/etc/bind/db.farizanwar";
};

zone    "anwar.id" {
         type master;
         file "/etc/bind/db.anwar";
};

zone    "200.168.192.in-addr.arpa" {
         type master;
         file "/etc/bind/db.192";
};

Isi konfigurasi pada file db.fariz

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     farizanwar.my.id. root.farizanwar.my.id. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      farizanwar.my.id.
@       IN      A       192.168.200.252
www     IN      A       192.168.200.252

Isi konfigurasi pada file db.anwar

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     anwar.id. root.anwar.id. (
                              5         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      anwar.id.
@       IN      A       192.168.200.252
www     IN      A       192.168.200.252

Jika pada konfigurasi normal (2 IP 2 Domain) kita membuat kita membuat file konfigurasi in-addr.arpa(db.192) nya berpasangan

namun kali ini kita membuat 2 domain dalam 1 ip kita hanya membuat file konfigurasi in-addr.arpa(db.192) nya hanya 1

Isi konfigurasi pada file in-addr.arpa(db.192)

;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@       IN      SOA     warswar.id. root.warswar.id. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      warswar.id.
252     IN      PTR     warswar.id.
252     IN      PTR     www.warswar.id.
@       IN      NS      wars.id
252     IN      PTR     wars.id
252     IN      PTR     www.wars.id

Catatan: Nomor Serial Tidak boleh sama antar konfigurasi yang sama

Restart bind9

/etc/init.d/bind9 restart

Pastikan tidak ada eror

Pengujian di web browser

Selanjutnya akses nama domain di web browser. Masing-masing domain harus menampilkan halaman index.html yang berbeda dan bukan juga halaman default dari Nginx atau Apache

www.farizanwar.my.id
www.anwar.id

Install Nginx + PHP

Sekarang setting Nginx agar bisa menjalankan aplikasi website berbasis bahasa pemrograman PHP.

Pasang repository untuk PHP 7.4.

sudo apt -y install lsb-release apt-transport-https ca-certificates
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list

update repositori

sudo apt update

jika tersedia upgrade, lakukan upgrade

sudo apt upgrade

sekarang install php 7.4

apt install php7.4 php7.4-fpm php7.4-cli php7.4-common php7.4-opcache php7.4-curl php7.4-mbstring php7.4-mysql php7.4-zip php7.4-xml php-imagick

Konfigurasi PHP

Buka file setting php.ini untuk PHP-FPM dan cari cgi.fix_pathinfo aktifkan (hapus tanda ; dan ubah nilainya menjadi 0)

nano /etc/php/7.4/fpm/php.ini
cgi.fix_pathinfo=0

Restart service PHP-FPM.

systemctl restart php7.4-fpm

Mengaktifkan php untuk server block (virtualhost) tertentu

Setting salah satu server block, misalnya farizanwar.my.id agar bisa menjalankan PHP.

nano /etc/nginx/sites-available/farizanwar.my.id.conf

Ubah menjadi.

server {
        listen 80;
        listen [::]:80;
 
        server_name www.farizanwar.my.id;
        root /var/www/farizanwar.my.id/;
 
        index index.php index.html index.htm;
 
        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }
 
        location ~ \.php$ {
                try_files $fastcgi_script_name =404;
                include fastcgi_params;
                fastcgi_pass                    unix:/var/run/php/php7.4-fpm.sock;
                fastcgi_index                   index.php;
                fastcgi_param DOCUMENT_ROOT     $realpath_root;
                fastcgi_param SCRIPT_FILENAME   $realpath_root$fastcgi_script_name; 
        }
 
        access_log /var/log/nginx/farizanwar.my.id.access.log;
        error_log /var/log/nginx/farizanwar.my.id.error.log warn;
}
 
# redirect dari non-www ke www.
server {
        listen 80;
        listen [::]:80;
 
        server_name .farizanwar.my.id;
 
        return 301 http://www.farizanwar.my.id$request_uri;
}

Catatan: Sesuaikan parameter unix: dengan versi php yang digunakan saat ini

Restart service Nginx.

systemctl restart nginx

Pengujian php

Buat file info.php yang berisi pemanggilan fungsi phpinfo() untuk menampilkan informasi PHP.

nano /var/www/farizanwar.my.id/info.php

masukkan ini kedalamnya

<?php phpinfo(); ?>

Terakhir akses http://farizanwar.my.id/info.php,

Tested on: Debian-server 10
Sumber: 
https://musaamin.web.id/cara-install-nginx-web-server-di-debian-9-server/