Server Blocks Nginx memungkinkan Anda untuk menjalankan lebih dari satu situs web pada satu server. Dengan Server Blocks, Anda dapat menentukan root dokumen situs (direktori yang berisi file situs web), membuat kebijakan keamanan terpisah untuk setiap situs, menggunakan sertifikat SSL berbeda untuk setiap situs dan banyak lagi.

Dalam tutorial ini, kami akan memberikan panduan langkah demi langkah tentang cara menyiapkan server blocks Nginx (mirip dengan Apache Virtual Hosts) di Ubuntu 18.04.

Prasyarat

Pastikan Anda telah memenuhi prasyarat berikut sebelum melanjutkan dengan tutorial ini:

Dalam beberapa dokumentasi, Anda kadang akan melihat Server Blocks dirujuk sebagai Virtual host. Namun virtual host sendiri adalah istilah dari Apache.

Buat Struktur Direktori

Root dokumen adalah direktori tempat file situs web disimpan yang disajikan sebagai respons terhadap permintaan. Kita dapat mengatur root dokumen ke lokasi mana pun yang kita inginkan tetapi dalam panduan ini kita akan menggunakan struktur direktori berikut:

/var/www/
├── domain1.com
│   └── public_html
├── domain2.com
│   └── public_html
├── domain3.com
│   └── public_html

Pada dasarnya kami akan membuat direktori terpisah untuk setiap domain yang ingin kami host di server kami di dalam direktori /var/www. Dalam setiap direktori ini, kami akan membuat direktori public_html yang akan menyimpan file situs web domain.

Mari kita buat direktori root untuk domain kita domain1.com dan domain2.com:

sudo mkdir -p /var/www/domain1.com/public_html
sudo mkdir -p /var/www/domain2.com/public_html

Untuk tujuan pengujian, kami akan membuat file index.html di dalam direktori root dokumen domain.

Buka editor Anda dan buat file demo:

/var/www/domain1.com/public_html/index.html
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Selamat Datang</title>
  </head>
  <body>
    <h1>Domain1 telah berjalan!</h1>
  </body>
</html>

Sedangkan untuk domain2 mari kita buat juga file demo yang sama seperti domain1.

/var/www/domain2.com/public_html/index.html
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Selamat Datang</title>
  </head>
  <body>
    <h1>Domain2 telah berjalan!</h1>
  </body>
</html>

Dalam panduan ini, kami menjalankan perintah sebagai pengguna sudo dan file serta direktori yang baru dibuat dimiliki oleh pengguna root.

Untuk menghindari masalah izin, kami dapat mengubah kepemilikan direktori root dokumen domain menjadi Nginx user (www-data):

sudo chown -R www-data: /var/www/domain1.com

lakukan juga untuk direktori kedua :

sudo chown -R www-data: /var/www/domain2.com

Membuat Server Block

Secara default pada sistem Ubuntu, konfigurasi server blocks Nginx disimpan di direktori /etc/nginx/sites-available, yang diaktifkan melalui symbolic links ke direktori /etc/nginx/sites-enabled/.

Buka editor pilihan Anda dan buat file server block berikut:

/etc/nginx/sites-available/domain1.com

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

    root /var/www/domain1.com/public_html;

    index index.html;

    server_name domain1.com www.domain1.com;

    access_log /var/log/nginx/domain1.access.log;
    error_log /var/log/nginx/domain1.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

kemudian pengaturan untuk server block domain2.com silahkan gunakan pengaturan berikut :

/etc/nginx/sites-available/domain2.com
server {
    listen 80;
   
    # tidak lagi menggunakan listen [::]:80; untuk server block kedua dan seterusnya
    # listen [::]:80;
    root /var/www/domain2.com/public_html;

    index index.html;

    server_name domain2.com www.domain2.com;

    access_log /var/log/nginx/domain2.access.log;
    error_log /var/log/nginx/domain2.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

Anda dapat memberi nama file konfigurasi sesuai selera Anda, tetapi saran terbaik adalah menggunakan nama domain. Bayangkan Anda memiliki 10 domain dengan file log yang sama, akan terjadi bencana jika 2 atau lebih situs sedang mengalami masalah. Pastinya akan sangat kesulitan untuk meneliti log yang banyak.

Untuk mengaktifkan file server block baru, kita perlu membuat symbolic link dari file ke direktori sites-enabled, yang akan dicari dan dibaca oleh Nginx saat startup:

sudo ln -s /etc/nginx/sites-available/domain1.com /etc/nginx/sites-enabled/

lakukan juga untuk domain2.com

sudo ln -s /etc/nginx/sites-available/domain2.com /etc/nginx/sites-enabled/

Test konfigurasi Nginx untuk sintaks yang benar:

sudo nginx -t

Jika tidak ada kesalahan, hasilnya akan terlihat seperti ini :

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Mulai ulang layanan Nginx agar perubahan diterapkan:

sudo systemctl restart nginx

untuk memverifikasi server block berfungsi seperti yang diharapkan, buka http://domain1.com dan http://domain2.com di browser pilihan Anda.

Conclusion

Anda telah belajar cara membuat konfigurasi server block Nginx untuk meng-host beberapa domain pada satu server Ubuntu. Anda dapat mengulangi langkah-langkah yang kami uraikan di atas dan membuat blok server tambahan untuk semua domain Anda.

Jika Anda ingin mengamankan situs web Anda dengan sertifikat LetsEncrypt SSL gratis, Anda dapat memeriksa panduan berikut: Amankan Nginx dengan Let’s Encrypt di Ubuntu 18.04