Setting Server Block Nginx di Ubuntu 16.04

Jika Anda pengguna web server NGINX, istilah Server Blocks mirip dengan istilah Virtual Hosts di Apache. Server Blocks dapat digunakan untuk merangkum rincian konfigurasi dan mengaktifkan web lebih dari satu domain dalam satu server. Dalam panduan ini, kita akan membahas bagaimana cara setting server block NGINX di Ubuntu 16.04.

Prasyarat

Kita akan menggunakan pengguna non-root dengan hak akses sudo sepanjang tutorial ini. Jika Anda tidak memiliki pengguna non-root seperti yang disebutkan, Anda dapat membuatnya dengan mengikuti panduan Pengaturan Server Awal Ubuntu 16.04.

Anda perlu menginstal NGINX di server. Panduan ini mencakup prosedor ini:

  • Install Nginx di Ubuntu 16.04

Anda dapat melanjutkan panduan ini setelah Anda memenuhi persyaratan diatas.

Contoh Konfigurasi

Untuk tujuan demo, kita akan menyiapkan dua domain yang akan dikonfigurasi di server NGINX. Nama domain yang akan digunakan adalah tes.com dan contoh.com

Langkah 1: Mengatur Direktori Root Dokumen

Secara default, NGINX pada Ubuntu Server 16.04 memiliki satu server block yang diaktifkan. Konfigurasi default ini akan menyajikan konten web yang ada di direktori /var/www/html.

Meskipun berfungsi dengan baik untuk satu situs web, kita memerlukan direktori tambahan jika kita akan melayani beberapa situs web dalam satu server NGINX.

Kita akan membuat struktur direktori di /var/www untuk setiap situs web. Dengan struktur tersebut, konten web dapat dikelola dengan mudah oleh administrator. Sekarang kita akan membuat direktori untuk setiap situs web dengan perintah sebagai berikut:

$ sudo mkdir -p /var/www/tes.com/html
$ sudo mkdir -p /var/www/contoh.com/html

Direktori situs web berhasil dibuatkan. Sekarang kita atur izin atau kepemilikian direktori tersebut ke akun pengguna biasa agar dapat mengakses direktori tersebut tanpa sudo.

Kita akan menggunakan variabel $USER untuk menetapkan kepemilikan ke akun yang sedang digunakan (pastikan Anda tidak masuk sebagai root). Ini akan memudahkan kita membuat dan mengubah konten pada direktori tersebut.

$ sudo chown -R $USER:$USER /var/www/tes.com/html
$ sudo chown -R $USER:$USER /var/www/contoh.com/html

Soal izin seharusnya sudah benar jika Anda belum mengubah nilau umask tetapi kita pastikan dengan mengetik:

$ sudo chmod -R 755 /var/www

Struktur direktori sudah dikonfigurasi dan kita dapat melanjutkan ke tahap berikutnya.

Langkah 2: Buat Halaman Contoh Untuk Setiap Situs Web

Saatnya kita membuat halaman contoh untuk setiap situs web yang sudah dibuat sehingga memiliki halaman yang dapat ditampilkan.

$ nano /var/www/tes.com/html/index.html

Dalam file tersebut, kita akan buat konten dasar yang menunjukan situs web apa yang sedang diakses, isi file tersebut dengan:

<html>
    <head>
        <title>Selamat Datang di tes.com!</title>
    </head>
    <body>
        <h1>Berhasil! Server block tes.com berfungsi!</h1>
    </body>
</html>

Simpan dan tutup editor setelah Anda selesai melakukan perubahan.

Baca Juga:  Cara Instal PHP 7.2 di Ubuntu 16.04 (PPA)

Untuk situs kedua pada dasarnya sama. Hanya saja sedikit merubah konten didalamnya. Anda perlu menyalin file tersebut ke direktori situs web yang kedua.

$ cp /var/www/tes.com/html/index.html /var/www/contoh.com/html/index.html

Kemudian Anda perlu mengubah sedikit konten didalam file index.html di direktori situs web kedua:

$ nano /var/www/contoh.com/html/index.html

Ubah isi file index.html seperti ini:

<html>
    <head>
        <title>Selamat Datang di Contoh.com!</title>
    </head>
    <body>
        <h1>Berhasil!  Server block contoh.com berfungsi!</h1>
    </body>
</html>

Simpan dan tutup setelah Anda selesai melakukan perubahan. Sampai tahap ini, masing-masing situs web memiliki halaman yang dapat ditampilkan.

Langkah 3: Buat File Server Block Untuk Masing-masing Domain

Buat File Server Block Pertama: tes.com

Seperti yang sudah disebutkan diatas, kita akan membuat file server block dengan cara menyalin dari konfigurasi server block default.

$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/tes.com

Kemudian buka file /etc/nginx/sites-available/tes.com dengan text editor:

$ sudo nano /etc/nginx/sites-available/tes.com

Abaikan baris yang dikomentari. Isi file terlihat seperti ini:

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

        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;

        server_name _;

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

Perlu diketahui, hanya satu server block di server NGINX yang dapat mengaktifkan opsi default_server. Opsi default_server sebagai Server Block default jika permintaan tidak sesuai dengan server_name. Hal ini seharusnya tidak terlalu sering terjadi, karena pengunjung akan mengakses situs web melalui nama domain.

Anda dapat memilik server block mana yang akan dijadikan sebagai default_server atau Anda dapat membiarkan server block default sebagai default_server yang akan menampilkan halaman yang ada di direktori /var/www/html.

Dalam panduan ini kita akan membiarkan server block default yang memiliki opsi default_server. Jadi kita perlu menghapus opsi default_server di file /etc/nginx/sites-available/tes.com. Isi dari file tersebut dapat diubah seperti ini:

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

        . . .
}

CATATAN
Anda dapat memeriksa opsi default_server hanya diaktifkan dalam satu server block aktif dengan cara mengetik:

$ grep -R default_server /etc/nginx/sites-enabled/

Jika duplikat maka NGINX akan memberikan peringatan bahwa konfigurasi tidak valid.

Kita akan mengubah isi file /etc/nginx/sites-available/tes.com untuk menyesuaikan root document ke direktori situs web yang sudah dibuat:

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

        root /var/www/tes.com/html;

}

Kita perlu memodifikasi server_name agar permintaan dari pengunjung dapat dilayani oleh NGINX. Anda juga dapat menambahkan alias www.tes.com sebagai alias di server block ini:

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

        root /var/www/tes.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name tes.com www.tes.com;

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

Simpan dan tutup editor setelah Anda selesai melakukan perubahan. Sampai tahap ini kita telah selesai mengkonfigurasi untuk situs web pertama tes.com.

Buat File Server Block Kedua: contoh.com

Kita sudah memiliki konfigurasi server block pertama (tes.com), kita cukup menyalin konfigurasi server block pertama dengan mengetik:

$ sudo cp /etc/nginx/sites-available/tes.com /etc/nginx/sites-available/contoh.com

Anda perlu menyesuaikan konten dari file tersebut dengan membuka editor:

$ sudo nano /etc/nginx/sites-available/contoh.com

Sekali lagi, pastikan Anda tidak menambahkan opsi default_server dalam file ini. Sesuaikan root document dengan mengarahkan ke direktori situs web kedua /var/www/contoh.com/html. Sesuaikan seperti berikut ini (simpan dan tutup setelah melakukan perubahan):

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

        root /var/www/contoh.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name contoh.com www.contoh.com;

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

Langkah 4: Aktifkan Server Block dan Restart NGINX

Setelah membuat 2 konfigurasi server block situs web, langkah selanjutnya kita perlu mengaktifkan server block tersebut agar dapat diakses oleh pengunjung. Kita bisa melakukan tahap ini dengan membuat symbolic links dari direktori sites-available ke direktori sites-enabled yang akan dibaca NGINX pada saat dimulai.

Baca Juga:  Microsoft Membawa SQL Server Untuk Linux

Kita dapat membuat symbolic links dengan cara mengetik:

$ sudo ln -s /etc/nginx/sites-available/tes.com /etc/nginx/sites-enabled/
$ sudo ln -s /etc/nginx/sites-available/contoh.com /etc/nginx/sites-enabled/

Kedua file tersebut sudah berada di direktori yang diaktifkan. Saat ini kita memiliki tiga server block yang diaktifkan. Masing-masing server block dikonfigurasi untuk melayani situs web berdasarkan server_name:

  • tes.com akan menanggapi permintaan untuk tes.com dan www.tes.com
  • contoh.com akan menanggapi permintaan untuk contoh.com dan www.contoh.com
  • default akan menanggapi setiap permintaan pada port 80 yang tidak sesuai dengan dua server block lainnya.

Untuk menghindari kemungkinan masalah memory hash bucket yang disebabkan oleh penambahan nama server tambahan, kita akan melanjutkan dan menyesuaikan nilai dalam file konfigurasi NGINX /etc/nginx/nginx.conf. Buka konfigurasi melalui editor:

$ sudo nano /etc/nginx/nginx.conf

Dalam file tersebut, temukan konfigurasi server_names_hash_bucket_size, kemudian hapus simbol # untuk menghapus tanda komentar pada baris tersebut (simpan dan tutup setelah melakukan perubahan).

http {
    . . .

    server_names_hash_bucket_size 64;

    . . .
}

Selanjutnya Anda perlu menguji untuk memastikan tidak ada kesalahan dalam konfigurasi tersebut.

$ sudo nginx -t

Jika tidak ada masalah, restart NGINX untuk menerapkan perubahan konfigurasi.

$ sudo systemctl restart nginx

Sampai tahap ini seharusnya NGINX sudah dapat melayani kedua domain yang disebutkan diatas.

Langkah ke 5: Ubah File Host Lokal Untuk Pengujian (Opsional)

Jika Anda tidak memiliki domain dan hanya menggunakan domain lokal, Anda perlu memodifikasi komputer lokal Anda yang dapat digunakan untuk menguji konfigurasi server block NGINX.

Ini tidak akan berlaku untuk pengunjung lain (online) untuk melihat situs web Anda tetapi ini akan mampu untuk menguji konfigurasi server block setiap situs web yang sudah dikonfigurasi. Pada dasarnya, ini melewati permintaan yang biasanya diarahkan ke DNS. Sebagai gantinya, kita dapat menambahkan alamat IP dan domain di komputer lokal.

Baca Juga:  Cara Instal Nginx Web Server di Ubuntu 16.04

CATATAN
Pastikan Anda menggunakan komputer lokal untuk melakukan langkah ini dan bukan di server VPS Anda. Anda perlu memiliki akses root atau menjadi grup sudo untuk melakukan perubahan ini.

Untuk melakukan perubahan pada file host, jalankan perintah dibawah ini:

lokal $ sudo nano /etc/hosts

Anda perlu mengetahui alamat IP server Anda dan me-rutekan domain ke server yang sudah dikonfigurasi di langkah-langkah sebelumnya. Tambahkan baris seperti ini (simpan dan tutup setelah melakukan perubahan):

127.0.0.1   localhost
. . .

36.81.113.5 tes.com www.tes.com
36.81.113.5 contoh.com www.contoh.com

Langkah 6: Uji Server Block NGINX

Anda harus menguji apakah server block yang sudah dikonfigurasi melalui langkah-langkah sebelumnya berfungsi dengan benar. Anda dapat melakukan pengujian dengan mengunjungi domain di web browser:

http://tes.com

Kemudian Anda akan melihat halaman yang terlihat seperti ini:

Berhasil! Server block tes.com berfungsi!

Jika Anda mengunjungi situs web kedua, Anda akan melihat halaman yang sedikit berbeda:

http://contoh.com

Berhasil! Server block contoh.com berfungsi!

Jika kedua situs web ini berfungsi, Anda telah berhasil mengkonfigurasi dua server block NGINX

Pada poin ini, jika Anda sudah mengubah file /etc/hosts di komputer lokal, mungkin Anda perlu menghapus baris yang sudah ditambahkan tadi setelah proses pengujian selesai.

Kesimpulan

Setelah mengikuti langkah-langkah dalam panduan ini, Anda sudah bisa membuat server block untuk setiap domain yang ingin Anda arahkan ke server Anda. Tidak ada batasan pada jumlah blok server yang dapat Anda buat, selama server Anda dapat menangani lalu lintas.