---
title: "Cara Menyiapkan Server Block Nginx untuk Banyak Domain"
description: "Cara menjalankan beberapa website di satu VPS dengan server block Nginx, mulai dari struktur folder, server_name, default_server, sampai HTTPS per domain."
url: "https://nivelva.com/insight/cara-menyiapkan-server-block-nginx-banyak-domain"
category: "Server \u0026 Infrastruktur"
tags: ["nginx","server block","virtual host","domain","vps"]
author: "Theresia Candiawan"
published: "2026-11-07T06:38:00+07:00"
updated: "2026-11-07T06:38:00+07:00"
language: "id"
publisher: "Nivelva (https://nivelva.com)"
---

# Cara Menyiapkan Server Block Nginx untuk Banyak Domain

> **Jawaban singkat:** Server block adalah blok server di konfigurasi Nginx yang melayani domain tertentu berdasarkan server_name. Buat satu file per domain, beri folder website dan log terpisah, tambahkan satu blok default_server sebagai penampung, lalu pasang HTTPS untuk tiap domain.

Satu VPS bisa melayani banyak domain sekaligus. Di Nginx, caranya dengan membuat **server block** terpisah untuk tiap domain, lalu Nginx memilih blok yang cocok berdasarkan nama domain yang diminta browser (header `Host`).

Kenapa ini penting? Tanpa pemisahan yang rapi, satu salah ketik bisa membuat domain A menampilkan isi domain B, atau domain yang belum diatur malah membuka website lain. Dengan pola yang konsisten, menambah domain baru cukup beberapa menit dan risikonya kecil.

## Bagaimana Nginx memilih server block?

Untuk setiap request, Nginx pertama-tama melihat alamat dan port tujuan (`listen`), lalu mencocokkan header `Host` dengan `server_name` di blok-blok yang mendengarkan port itu. Menurut dokumentasi resmi nginx.org, urutan pencocokannya:

1. Nama persis, misalnya `tokoku.example`.
2. Wildcard terpanjang di depan, misalnya `*.tokoku.example`.
3. Wildcard terpanjang di belakang, misalnya `mail.*`.
4. Regular expression pertama yang cocok, sesuai urutan di konfigurasi.

Kalau tidak ada yang cocok sama sekali, request jatuh ke **default server** untuk port tersebut. Bila tidak ada yang ditandai `default_server`, Nginx memakai blok pertama yang ditemukan untuk port itu. Ini sumber kejutan paling umum: domain asing yang diarahkan ke IP-mu tiba-tiba menampilkan website pertama.

## Struktur folder yang rapi

Di Ubuntu dan Debian, paket Nginx memakai pola dua folder:

- `/etc/nginx/sites-available/` berisi semua file konfigurasi domain.
- `/etc/nginx/sites-enabled/` berisi symlink ke file yang aktif.

Di AlmaLinux, Rocky, dan distro keluarga RHEL, polanya biasanya satu folder `/etc/nginx/conf.d/` dengan file berakhiran `.conf`. Prinsip di bawah tetap sama, hanya lokasinya berbeda.

Untuk isi website, beri setiap domain folder dan pemilik sendiri:

```bash
sudo mkdir -p /var/www/tokoku.example/public
sudo mkdir -p /var/www/blogku.example/public
sudo chown -R $USER:www-data /var/www/tokoku.example /var/www/blogku.example
```

## Membuat server block untuk domain pertama

Buat file `/etc/nginx/sites-available/tokoku.example`:

```nginx
server {
    listen 80;
    listen [::]:80;
    server_name tokoku.example www.tokoku.example;

    root /var/www/tokoku.example/public;
    index index.html index.php;

    access_log /var/log/nginx/tokoku.example.access.log;
    error_log  /var/log/nginx/tokoku.example.error.log;

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

Untuk domain kedua, salin file ini menjadi `blogku.example`, lalu ganti `server_name`, `root`, dan nama file log. Log terpisah sangat membantu saat melacak error, karena kamu tidak perlu memilah log campuran.

Kalau website memakai PHP, tambahkan blok `location ~ \.php$` yang mengarah ke socket PHP-FPM. Setiap domain bahkan bisa memakai versi PHP berbeda, caranya ada di panduan [menjalankan banyak versi PHP di satu server](https://nivelva.com/insight/cara-menjalankan-banyak-versi-php-satu-server).

## Mengaktifkan dan menguji konfigurasi

```bash
sudo ln -s /etc/nginx/sites-available/tokoku.example /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/blogku.example /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```

Di distro keluarga RHEL yang tidak memakai `sites-enabled`, cukup simpan file sebagai `/etc/nginx/conf.d/tokoku.example.conf`, karena semua file `.conf` di folder itu otomatis dimuat.

Biasakan selalu menjalankan `nginx -t` sebelum reload. Bila ada kesalahan sintaks, Nginx menolak konfigurasi baru dan website yang sedang berjalan tidak terganggu. Pakai `reload`, bukan `restart`, agar koneksi yang sedang berjalan tidak diputus.

Sebelum DNS diarahkan, kamu bisa menguji dari laptop dengan `curl -H "Host: tokoku.example" http://IP-SERVER/` atau menambahkan baris sementara di file `hosts`.

## Apa gunanya blok default_server?

Blok penampung mencegah domain atau IP yang tidak dikenal membuka website milikmu. Buat `/etc/nginx/sites-available/00-default`:

```nginx
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 444;
}
```

Kode `444` adalah kode khusus Nginx yang menutup koneksi tanpa mengirim respons apa pun. Nama `_` tidak punya arti istimewa, hanya nama yang tidak mungkin cocok dengan domain sungguhan. Di Ubuntu, file bawaan `default` di `sites-enabled` sudah memakai `default_server`. Hapus symlink-nya atau ubah file itu, karena satu port hanya boleh punya satu `default_server`.

Untuk port 443, blok penampung juga perlu sertifikat. Pilihan yang umum adalah `ssl_reject_handshake on;` (tersedia sejak Nginx 1.19.4) sehingga tidak perlu sertifikat palsu.

## Bagaimana memasang HTTPS untuk banyak domain?

Setelah DNS setiap domain mengarah ke IP server, Certbot dengan plugin Nginx bisa membaca `server_name` di tiap blok dan memasang sertifikat sekaligus:

```bash
sudo certbot --nginx -d tokoku.example -d www.tokoku.example
sudo certbot --nginx -d blogku.example -d www.blogku.example
```

Memisahkan perintah per website membuat setiap domain punya sertifikat sendiri, jadi masalah di satu domain tidak menghambat perpanjangan domain lain. Langkah lengkapnya ada di panduan [pasang SSL Let's Encrypt dengan Certbot](https://nivelva.com/insight/cara-pasang-ssl-let-s-encrypt-gratis-certbot). Setelah semua domain berjalan, lanjutkan dengan [hardening Nginx untuk server produksi](https://nivelva.com/insight/hardening-nginx-server-produksi).

| Masalah | Penyebab umum | Perbaikan |
|:--|:--|:--|
| Domain B menampilkan isi domain A | `server_name` salah ketik atau blok belum diaktifkan | Cek symlink dan ejaan, jalankan `nginx -t` |
| Domain asing membuka websitemu | Belum ada `default_server` penampung | Tambahkan blok `return 444` |
| Error `duplicate default server` | Dua blok memakai `default_server` di port sama | Sisakan satu |
| Peringatan `conflicting server name` | Nama domain yang sama muncul di dua blok | Hapus salah satu |
| 403 Forbidden | Folder tidak terbaca pengguna Nginx atau tidak ada file index | Periksa izin dan `index` |

> **Satu pola nama file:**
>
> Beri nama file konfigurasi sama dengan domainnya. Saat domain ke-20 ditambahkan, kamu tetap bisa menemukan, menonaktifkan, atau menghapus konfigurasi tanpa menebak.

## Pertanyaan yang sering diajukan

### Berapa banyak domain yang bisa dilayani satu Nginx?

Nginx tidak membatasi jumlah server block secara praktis. Batas sebenarnya ada di sumber daya server: CPU, RAM, dan disk untuk aplikasi di tiap domain.

### Apakah server block sama dengan virtual host di Apache?

Konsepnya sama, yaitu satu server melayani banyak domain berdasarkan nama. Istilah server block khas Nginx, sedangkan Apache menyebutnya VirtualHost.

### Bagaimana menonaktifkan satu domain sementara?

Hapus symlink-nya di `sites-enabled`, lalu `nginx -t` dan reload. File aslinya di `sites-available` tetap aman untuk diaktifkan lagi.

## Sumber

- <https://nginx.org/en/docs/http/server_names.html>
- <https://nginx.org/en/docs/http/request_processing.html>
- <https://nginx.org/en/docs/http/ngx_http_core_module.html#server_name>

---

Diterbitkan oleh Nivelva Insight (https://nivelva.com/insight/). Artikel ini: https://nivelva.com/insight/cara-menyiapkan-server-block-nginx-banyak-domain
Kontak Nivelva: WhatsApp https://wa.me/6285111245007, email hello@nivelva.com
