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.
Contents
1. Konsep Virtual Host
Virtual host memungkinkan satu server IP melayani beberapa domain. Ada dua tipe:
- Name-based Virtual Host: menggunakan
server_nameuntuk 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 utamawww.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.comakan 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.pngakan diarahkan ke/var/www/static/images/logo.png aliasberbeda dariroot, 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.comhanya 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 publikssl_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-availableberisi konfigurasi domain sites-enabledadalah symlink ke domain aktif- Root folder berbeda untuk setiap domain
7. Kesimpulan
Virtual host di Nginx memungkinkan:
- Menjalankan beberapa domain pada satu server
- Mengatur server_name untuk memilih server block
- Mengelola redirect, alias, dan folder statis
- Menggunakan port berbeda atau SSL untuk domain tertentu
- Menyimpan konfigurasi terpisah di
sites-availabledan mengaktifkannya melaluisites-enabled
Dengan pemahaman ini, kamu dapat mengelola banyak website di satu server dengan struktur teratur dan aman.