Cara Membuat Server Block NginX (virtual host) di Ubuntu 20.04

Tutorial Cara Membuat Server Block NginX (virtual host) di Ubuntu 20.04 – Pada umumnya penyedia shared hosting, memberikan pelayanan berupa cPanel yang memudahkan kita untuk mengatur konfigurasi website termasuk dalam mengatur subdomain, add-ons domain di dalamnya. Lantas bagaimana membuat server block (virtual host) beberapa domain, maupun subdomain pada virtual private server menggunakan Nginx webserver?

Apa itu Server Block?

Server Block, sering disebut sebagai virtual host pada Nginx adalah fitur dari web server Nginx yang memungkinkan kita untuk menjadikan hosting beberapa website di dalam satu server. Berbeda dengan menyiapkan dan mengonfigurasi server untuk setiap domain, Server Block menjadikan hosting sejumlah website pada satu server bisa untuk dijadikan alternatif sebagai penghemat waktu dan uang.

Apa saja yang dibutuhkan untuk membuat Server Block pada NginX?

Membuat Server Block NginX

Sebelum memulai untuk membuat virtual host, seperti biasa kita membutuhkan akses ke server via SSH. Setelah login ke server via SSH, pastikan dan biasakan untuk melakukan update package index. Agar semua package yang terinstall diperbarui ke versi yang baru.

sudo apt update -y && sudo apt upgrade -y

Setelah melakukan update package index kita bisa memulai membuat Server Block. Pastikan Nginx webserver terinstall atau menggunakan perintah dibawah ini jika belum melakukan instalasi NginX webserver:

sudo apt-get install nginx

Note: dengan menerapkan server block (virtual host) ini, maka kemampuan server tersebut menjadi lebih terbebani karena bekerja dengan lebih dari satu website.

Membuat Struktur Direktori

Server Block Nginx dapat mengembangkan banyak website pada satu server. Karena setiap situs web memiliki dokumentasi situs individual, kita perlu membuat struktur direktori individual untuk menyimpan data.

Setiap Server Block harus memiliki direktori di dalam root dokumen (direktori /var/www).

Tutorial kali ini menunjukkan cara membuat Server Block untuk dua server (namadomain1.com dan namadomain2.com). Kita dapat menyesuaikan konfigurasi dan menyesuaikan resource masing-masing Server Block.

Disini kita akan membuat 2 direktori 2 baru untuk 2 domain. Disini kita membuat direktori baru pada /var/www.

sudo mkdir -p /var/www/namadomain1.com/html
sudo mkdir -p /var/www/namadomain2.com/html

Dimana direktori html tersebut tempat dimana kita menyimpan file konten dari website.

Disini kita membuat 2 file html sederhana “Hello World” di direktori tersebut.

Untuk domain pertama:

nano /var/www/namadomain1.com/html/index.html
<html>
	<body>
		<h1>Hello World</h1>
		<p>Test NginX Webserver Domain 1</p>
		<p>by Bagus Judistirah</p>
		<p>https://judisweb.com</p>
	</body>
</html>

Simpan file tersebut dan keluar editor nano.

Untuk domain kedua:

nano /var/www/namadomain2.com/html/index.html
<html>
	<body>
		<h1>Hello World</h1>
		<p>Test NginX Webserver Domain 2</p>
		<p>by Bagus Judistirah</p>
		<p>https://bjxbro.online</p>
	</body>
</html>

Simpan file tersebut dan keluar editor nano.

Karena dalam membuat folder tersebut kita menggunakan root maka perlu kita rubah ijin kepemilikan folder tersebut menjadi www-data.

sudo chown –R www-data:www-data /var/www/namadomain1.com
sudo chown –R www-data:www-data /var/www/namadomain2.com

Membuat Konfigurasi Server Block NginX

Sebelum kita mempersiapkan server block untuk dua domain, kita perlu mempersiapkan 2 direktori:

  • sites-available: Direktori website yang tersedia untuk menyimpan Server Block
  • sites-enabled: Direktori yang akan memberi tahu Nginx tautan mana yang akan diterbitkan dan blok mana yang membagikan konten dengan pengunjung.

Periksa direktori tersebut yang berada di lokasi /etc/nginx

cd /etc/nginx/
/etc/nginx$ ls -l
PicsArt 11 06 10.26.40
NginX Directory

Jika tidak terdapat direktori sites-available dan sites-enabled pada NginX direktori maka kita perlu membuatnya menggunakan perintah mkdir:

sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled

Kemudian buka file konfigurasi NginX dan edit seperti dibawah ini menggunakan editor nano:

sudo nano /etc/nginx/nginx.conf

Selanjutnya pada blok http, tambahkan baris berikut ini:

include /etc/nginx/sites-enabled/*;
server_names_hash_bucket_size 64;

Jika baris tersebut sudah ada biasanya menggunakan tanda comment “#” dan hapus tanda tersebut. Pada baris server_names_hash_bucket_size meningkatkan berapa banyak memori yang dicadangkan untuk memeriksa beberapa nama domain.

PicsArt 11 06 11.20.53
NginX conf

Note: include /etc/nginx/sites-enabled/*.conf merupakan file konfigurasi setiap nama domain yang diakhiri dengan ekstensi .conf atau NginX akan memproses konfigurasi domain hanya dengan file berekstensi .conf. Secara default kita boleh untuk tidak menggunakan ekstensi tersebut (include /etc/nginx/sites-enabled/*), jadi langsung menggunakan nama domain atau NginX memproses semua file konfigurasi didalam direktori tersebut.

Membuat File Server Block NginX

Paket webserver Nginx dilengkapi dengan Server Block default dengan nama default. Karena kita perlu membuat Server Block untuk setiap domain, cara termudah untuk melakukannya adalah dengan menyalin template yang ada dan memodifikasi spesifikasinya.

Membuat file Server Block NginX untuk namadomain1.com:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/namadomain1.com.conf

Membuat file Server Block NginX untuk namadomain2.com:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/namadomain2.com.conf

Setelah menyalin template default untuk 2 file Server Block, selanjutnya kita mengedit file tersebut dengan editor:

sudo nano /etc/nginx/sites-available/namdomain1.com.conf

Server Block Nginx konfigurasi secara default :

# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or WordPress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
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/ =404;
        }

        # 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.4-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;
        #}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#       listen 80;
#       listen [::]:80;
#
#       server_name example.com;
#
#       root /var/www/example.com;
#       index index.html;
#
#       location / {
#               try_files $uri $uri/ =404;
#       }
#}

Ada 3 baris yang perlu kita edit dalam file Server Block NginX tersebut:

  • server_name harus sesuai dengan nama domain situs web pertama. Pastikan untuk menyertakan alamat dengan dan tanpa www. awalan. Dengan begitu, server akan mengenali kedua jenis permintaan dari pengunjung dan mengarahkannya ke konten yang sama.
  • Ubah direktori root agar sesuai dengan namadomain1.com
  • Tambahkan perintah try_files dengan kesalahan 404 untuk contoh ketika server menerima permintaan untuk file dan direktori yang tidak dapat diakses

Cari “Virtual Host configuration for example.com” dan rubah 3 baris seperti server_name, root, try_files:

# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
server {
       listen 80;
       listen [::]:80;
#
       server_name namadomain1.com www.namadomain1.com;
#
       root /var/www/namadomain1.com;
       index index.html;
#
       location / {
               try_files $uri $uri/ =404;
       }
}
Server Block Nginx
Server Block Nginx

Simpan file tersebut dan keluar editor.

Ulangi langkah diatas untuk mengedit file Server Block namadomain2.com.

Verifikasi syntax NginX:

sudo nginx -t

Mengaktifkan Server Block NginX

Untuk mengaktifkan file server block (virtual host) buat tautan simbolis dari direktori sites-available ke sites-enabled dengan perintah:

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

Ulangi dengan namadomain2.com, setelah itu restart NginX untuk mereload ulang konfigurasi.

sudo systemctl restart nginx

Setelah merestart nginx service, buka web browser kemudian ketikkan alamat kedua domain tersebut ke dalam web browser.

Referensi: nginx.org

Kesimpulan

Setelah membaca tutorial Cara Membuat Server Block NginX (virtual host) di Ubuntu 20.04 ini, kita telah memahami prinsip dasar menginstal dan menyiapkan server blovk Nginx untuk menjadikan hosting dengan banyak domain di Ubuntu 20.04.

Semoga bermanfaat.

Tinggalkan komentar