Bab 7: Virtual Host di Nginx – Mengelola Multiple Domain dan SSL

Bab 7: Virtual Host di Nginx – Mengelola Multiple Domain dan SSL

Virtual host memungkinkan Nginx melayani beberapa domain dari satu server. Dengan virtual host, kamu bisa mengatur domain berbeda dengan konfigurasi, port, dan SSL sendiri, tanpa perlu server terpisah.


1. Konsep Virtual Host

Virtual host memungkinkan satu server IP melayani beberapa domain. Ada dua tipe:

  • Name-based Virtual Host: menggunakan server_name untuk membedakan domain.
  • IP-based Virtual Host: setiap domain menggunakan IP berbeda (jarang dipakai karena IP terbatas).

Contoh penggunaan umum:

example.com
blog.example.com
shop.example.com

Semua domain bisa dijalankan di server yang sama dengan virtual host berbeda.


2. Konfigurasi server_name

server_name menentukan domain yang dilayani oleh server block tertentu.

Contoh server block:

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/html/example;
    index index.html;
}
  • example.com → domain utama
  • www.example.com → alias domain

Nginx akan memilih server block dengan server_name yang cocok saat request masuk.


3. Multiple Server Blocks

Satu Nginx dapat memiliki beberapa server block, masing-masing untuk domain berbeda:

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/html/example;
    index index.html;
}

server {
    listen 80;
    server_name blog.example.com;

    root /var/www/html/blog;
    index index.html;
}
  • Setiap server block memiliki root folder dan konfigurasi sendiri
  • Request untuk blog.example.com akan diarahkan ke folder /var/www/html/blog

4. Redirect dan Alias

4.1 Redirect domain

Redirect berguna untuk mengarahkan domain atau subdomain ke domain utama:

server {
    listen 80;
    server_name www.example.com;

    return 301 http://example.com$request_uri;
}
  • return 301 → redirect permanen
  • $request_uri → mempertahankan path dan query string

4.2 Alias folder

alias digunakan jika lokasi URL berbeda dari path folder:

server {
    listen 80;
    server_name static.example.com;

    location /images/ {
        alias /var/www/static/images/;
    }
}
  • Request static.example.com/images/logo.png akan diarahkan ke /var/www/static/images/logo.png
  • alias berbeda dari root, harus diakhiri dengan /

5. Port dan SSL Virtual Host

5.1 Virtual host dengan port berbeda

Satu server dapat melayani domain berbeda di port berbeda:

server {
    listen 8080;
    server_name dev.example.com;

    root /var/www/html/dev;
    index index.html;
}
  • Domain dev.example.com hanya bisa diakses melalui port 8080

5.2 Virtual host dengan SSL

Untuk HTTPS, sertakan port 443 dan sertifikat SSL:

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    root /var/www/html/example;
    index index.html;
}
  • ssl_certificate → sertifikat publik
  • ssl_certificate_key → kunci privat
  • Gunakan juga return 301 https://example.com$request_uri; pada port 80 untuk redirect ke HTTPS

6. Contoh Struktur Virtual Host Nginx

/etc/nginx/
├── sites-available/
│   ├── example.com
│   └── blog.example.com
├── sites-enabled/
│   ├── example.com -> ../sites-available/example.com
│   └── blog.example.com -> ../sites-available/blog.example.com
/var/www/html/
├── example/
│   └── index.html
└── blog/
    └── index.html
/etc/ssl/
├── certs/
│   └── example.com.crt
└── private/
    └── example.com.key
  • File di sites-available berisi konfigurasi domain
  • sites-enabled adalah symlink ke domain aktif
  • Root folder berbeda untuk setiap domain

7. Kesimpulan

Virtual host di Nginx memungkinkan:

  1. Menjalankan beberapa domain pada satu server
  2. Mengatur server_name untuk memilih server block
  3. Mengelola redirect, alias, dan folder statis
  4. Menggunakan port berbeda atau SSL untuk domain tertentu
  5. Menyimpan konfigurasi terpisah di sites-available dan mengaktifkannya melalui sites-enabled

Dengan pemahaman ini, kamu dapat mengelola banyak website di satu server dengan struktur teratur dan aman.