Cara Setting Virtual Hosts di Nginx untuk Multi-Domain

Cara Setting Virtual Hosts di Nginx untuk Multi-Domain

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.


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:

  1. Isolasi website: Setiap domain memiliki folder root, log, dan konfigurasi sendiri
  2. Kemudahan SSL: Bisa menerapkan sertifikat SSL berbeda untuk tiap domain
  3. Skalabilitas: Mudah menambah domain baru tanpa memengaruhi website yang lain
  4. Optimasi performa: Bisa mengatur cache, gzip, dan aturan khusus tiap domain

Persiapan Sebelum Membuat Virtual Hosts

Sebelum memulai, ada beberapa hal yang perlu dipersiapkan:

  1. Pastikan Nginx terinstall sudo apt update sudo apt install nginx Cek versi: nginx -v
  2. Buat folder root untuk tiap website sudo mkdir -p /var/www/domain1.com/html sudo mkdir -p /var/www/domain2.com/html
  3. 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
  4. 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
  5. Pastikan DNS domain mengarah ke IP server
    • A record: domain1.com → IP server
    • A record: domain2.com → IP server
  6. 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 --redirect untuk memaksa HTTPS
  • Aktifkan auto-renew dengan cron: sudo systemctl status certbot.timer

Optimasi Server Blocks

Beberapa tips agar website lebih cepat dan aman:

  1. Aktifkan gzip compression gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
  2. Caching browser location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control "public"; }
  3. Batasi request body size client_max_body_size 10M;
  4. 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

MasalahPenyebabSolusi
502 Bad GatewayPHP-FPM tidak berjalansudo systemctl start php7.4-fpm
403 ForbiddenHak akses folder salahsudo chown -R www-data:www-data /var/www/...
DNS tidak resolveA record belum diarahkan ke IPUpdate DNS record dan tunggu propagasi
404 Not FoundSalah path rootPastikan 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:

  1. Buat folder web root untuk tiap domain
  2. Buat konfigurasi server block di sites-available
  3. Aktifkan dengan symlink ke sites-enabled
  4. Tes konfigurasi dan restart Nginx
  5. (Opsional) Pasang SSL dengan Let’s Encrypt
  6. 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.