Skip to content

Nginx

Panduan Konfigurasi Nginx Server Block (Virtual Host)

Nginx Server Block adalah konfigurasi yang memungkinkan satu server Nginx melayani beberapa domain atau situs web yang berbeda. Dalam panduan ini, kita akan mengkonfigurasi Server Block untuk domain app.akhmad.cloud.

I. Persiapan Awal dan Instalasi

Langkah pertama adalah memastikan Nginx sudah terinstal dan direktori untuk situs web baru sudah siap.

1. Instalasi dan Update

Pastikan sistem Anda up-to-date dan Nginx terinstal:

bash
sudo apt update
sudo apt install nginx

2. Membuat Direktori Situs Web

Kita akan membuat direktori root untuk situs web baru dan mengatur izinnya. Direktori ini adalah tempat file HTML, PHP, dan aset lainnya akan disimpan.

bash
sudo mkdir -p /var/www/app.akhmad.cloud/public
sudo chown -R www-data:www-data /var/www/app.akhmad.cloud/public
  • /var/www/app.akhmad.cloud/public: Ini adalah jalur Document Root atau tempat Nginx akan mencari file situs web.
  • chown -R www-data:www-data: Memberikan kepemilikan kepada pengguna Nginx (www-data) untuk memastikan Nginx dapat membaca dan menyajikan file.

3. Membuat File Index Uji Coba

Buat file index.html sederhana untuk menguji apakah Server Block berfungsi:

bash
echo "<h1>Welcome to app.akhmad.cloud</h1>" | sudo tee /var/www/app.akhmad.cloud/public/index.html

II. Konfigurasi Server Block

Server Block Nginx disimpan di direktori /etc/nginx/sites-available/.

1. Membuat File Konfigurasi

Buat file konfigurasi baru menggunakan nama domain Anda. Gunakan editor seperti nano:

bash
sudo nano /etc/nginx/sites-available/app.akhmad.cloud

2. Isi File Konfigurasi (app.akhmad.cloud)

Salin dan tempel konfigurasi berikut ke dalam file. Konfigurasi ini dirancang untuk melayani aplikasi PHP yang menggunakan PHP-FPM.

nginx
server {
    # Mendefinisikan port untuk mendengarkan (standar HTTP)
    listen 80;
    listen [::]:80;

    # Nama domain yang akan dilayani oleh blok ini
    server_name app.akhmad.cloud;

    # Lokasi dasar tempat file situs web berada
    root /var/www/app.akhmad.cloud/public;

    # Pengaturan dasar kinerja dan keamanan
    sendfile on; # Mengaktifkan transfer file yang efisien
    client_max_body_size 20M; # Batas ukuran upload
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    # Urutan file yang akan dicari jika URL adalah direktori
    index index.php index.html;

    charset utf-8;

    # Blok Lokasi Utama: Mengarahkan permintaan
    location / {
        # Mencoba mencari file yang diminta. Jika tidak ada, fallback ke index.php
        try_files $uri $uri/ /index.php?$query_string;
    }

    # Blok untuk file-file statis umum, mematikan log
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    # Mengarahkan semua Error 404 ke index.php (umum pada framework)
    error_page 404 /index.php;

    # Blok Lokasi PHP: Mengirim permintaan PHP ke PHP-FPM
    location ~ \.php$ {
        # Mengarahkan permintaan ke prosesor PHP-FPM (versi 8.3)
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_hide_header X-Powered-By;
    }

    # Blok Keamanan: Mencegah akses ke file tersembunyi (dot files)
    location ~ /\.(?!well-known).* {
        deny all;
    }
}

III. Mengaktifkan dan Menguji Server Block

Setelah file konfigurasi dibuat, kita perlu mengaktifkannya dan me-restart Nginx.

Nginx hanya membaca konfigurasi yang ada di direktori /etc/nginx/sites-enabled/. Kita membuat symbolic link (shortcut) dari file yang baru kita buat ke direktori ini:

bash
sudo ln -s /etc/nginx/sites-available/app.akhmad.cloud /etc/nginx/sites-enabled/

Catatan: Perintah yang Anda berikan menyertakan link untuk akhmad.cloud dan app.akhmad.cloud. Pastikan Anda hanya membuat link untuk domain yang benar-benar ingin Anda aktifkan. Saya hanya menyertakan app.akhmad.cloud di sini.

2. Menguji Konfigurasi

Selalu uji sintaks konfigurasi Nginx sebelum me-restart untuk menghindari downtime:

bash
sudo nginx -t

Jika outputnya adalah: syntax is ok dan test is successful, Anda siap untuk melanjutkan.

3. Restart Nginx

Muat ulang layanan Nginx untuk menerapkan konfigurasi baru:

bash
sudo systemctl restart nginx

Sekarang, jika Anda mengakses http://app.akhmad.cloud di browser Anda (setelah memastikan DNS domain telah diarahkan ke IP server Anda), Nginx akan melayani konten dari /var/www/app.akhmad.cloud/public/index.html.