Menjalankan banyak website dalam satu server adalah kebutuhan umum bagi pengembang dan pemilik bisnis. Dengan menggunakan Virtual Hosts atau Server Blocks di Nginx, Anda bisa menjalankan beberapa domain dan subdomain secara terpisah, tetapi tetap pada satu server.
Hal ini membuat manajemen website lebih efisien, hemat biaya, dan mudah diatur.
Artikel ini membahas langkah-langkah lengkap untuk setup Virtual Hosts di Nginx untuk multi-domain, beserta tips, troubleshooting, dan optimasi untuk performa serta keamanan.
Contents
Apa Itu Virtual Hosts di Nginx?
Virtual Hosts adalah konsep yang memungkinkan satu server menampung beberapa website berbeda berdasarkan:
- Nama domain: Contohnya
domain1.com,domain2.com - Subdomain: Contohnya
blog.domain1.com,shop.domain2.com - Port: Misalnya 80 untuk HTTP, 443 untuk HTTPS
Di Nginx, Virtual Hosts disebut Server Blocks, dan setiap domain biasanya memiliki konfigurasi sendiri di dalam blok server { ... }.
Kelebihan menggunakan Server Blocks:
- Isolasi website: Setiap domain memiliki folder root, log, dan konfigurasi sendiri
- Kemudahan SSL: Bisa menerapkan sertifikat SSL berbeda untuk tiap domain
- Skalabilitas: Mudah menambah domain baru tanpa memengaruhi website yang lain
- Optimasi performa: Bisa mengatur cache, gzip, dan aturan khusus tiap domain
Persiapan Sebelum Membuat Virtual Hosts
Sebelum memulai, ada beberapa hal yang perlu dipersiapkan:
- Pastikan Nginx terinstall
sudo apt update sudo apt install nginxCek versi:nginx -v - Buat folder root untuk tiap website
sudo mkdir -p /var/www/domain1.com/html sudo mkdir -p /var/www/domain2.com/html - Set hak akses folder
sudo chown -R $USER:$USER /var/www/domain1.com/html sudo chown -R $USER:$USER /var/www/domain2.com/html sudo chmod -R 755 /var/www - Buat file index sederhana
echo "<h1>Selamat datang di Domain1.com</h1>" > /var/www/domain1.com/html/index.html echo "<h1>Selamat datang di Domain2.com</h1>" > /var/www/domain2.com/html/index.html - Pastikan DNS domain mengarah ke IP server
- A record:
domain1.com → IP server - A record:
domain2.com → IP server
- A record:
- Instal PHP dan MySQL (jika website menggunakan PHP)
sudo apt install php-fpm php-mysql sudo systemctl enable php7.4-fpm sudo systemctl start php7.4-fpm
Struktur Konfigurasi Nginx
Nginx menggunakan dua folder utama untuk manajemen server blocks:
/etc/nginx/sites-available/→ tempat menyimpan konfigurasi server yang aktif/inaktif/etc/nginx/sites-enabled/→ symlink ke konfigurasi aktif
Langkahnya: buat konfigurasi di sites-available, lalu aktifkan dengan symlink ke sites-enabled.
Membuat Virtual Host (Server Block) untuk Multi-Domain
Contoh domain1.com
Buat file /etc/nginx/sites-available/domain1.com:
server {
listen 80;
server_name domain1.com www.domain1.com;
root /var/www/domain1.com/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
# Logging
access_log /var/log/nginx/domain1.com.access.log;
error_log /var/log/nginx/domain1.com.error.log;
# PHP support
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
# Security headers
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
}
Contoh domain2.com
Buat file /etc/nginx/sites-available/domain2.com:
server {
listen 80;
server_name domain2.com www.domain2.com;
root /var/www/domain2.com/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/domain2.com.access.log;
error_log /var/log/nginx/domain2.com.error.log;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
}
Aktifkan Server Blocks
sudo ln -s /etc/nginx/sites-available/domain1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/domain2.com /etc/nginx/sites-enabled/
Tes konfigurasi Nginx
sudo nginx -t
Jika konfigurasi valid, restart Nginx:
sudo systemctl restart nginx
Mengaktifkan HTTPS dengan Let’s Encrypt
Agar aman dan SEO-friendly, gunakan SSL gratis dari Let’s Encrypt:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d domain1.com -d www.domain1.com
sudo certbot --nginx -d domain2.com -d www.domain2.com
Certbot otomatis mengatur redirect HTTP → HTTPS.
Tips SSL
- Gunakan
--redirectuntuk memaksa HTTPS - Aktifkan auto-renew dengan cron:
sudo systemctl status certbot.timer
Optimasi Server Blocks
Beberapa tips agar website lebih cepat dan aman:
- Aktifkan gzip compression
gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; - Caching browser
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control "public"; } - Batasi request body size
client_max_body_size 10M; - Rate limiting untuk mencegah serangan DDoS ringan
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s; limit_req zone=mylimit burst=20;
Troubleshooting Umum
| Masalah | Penyebab | Solusi |
|---|---|---|
| 502 Bad Gateway | PHP-FPM tidak berjalan | sudo systemctl start php7.4-fpm |
| 403 Forbidden | Hak akses folder salah | sudo chown -R www-data:www-data /var/www/... |
| DNS tidak resolve | A record belum diarahkan ke IP | Update DNS record dan tunggu propagasi |
| 404 Not Found | Salah path root | Pastikan root /var/www/domain/... benar |
Kesimpulan
Mengatur Virtual Hosts di Nginx membuat satu server bisa menjalankan banyak website dengan rapi, aman, dan mudah dikelola. Langkah-langkah inti:
- Buat folder web root untuk tiap domain
- Buat konfigurasi server block di
sites-available - Aktifkan dengan symlink ke
sites-enabled - Tes konfigurasi dan restart Nginx
- (Opsional) Pasang SSL dengan Let’s Encrypt
- Optimasi cache, gzip, dan rate-limit untuk performa dan keamanan
Dengan panduan ini, Anda bisa mengelola multi-domain di Nginx tanpa kebingungan, sekaligus menyiapkan website untuk produksi profesional.