Nginx: Web Server Super Cepat, Andal – Instalasi & Konfigurasi

Nginx: Web Server Super Cepat, Andal – Instalasi & Konfigurasi

Update 22/11/25 · Read 6 min

Nginx telah menjadi salah satu web server paling populer di dunia, terutama karena performa tinggi dan fleksibilitasnya. Tidak hanya digunakan sebagai web server, Nginx juga sering dipakai sebagai reverse proxy, load balancer, dan HTTP cache.

Artikel ini akan membahas keunggulan Nginx, cara instalasi dan konfigurasi dasar, serta menjawab pertanyaan umum seputar penggunaannya.

Apa Itu Nginx?

Nginx (dibaca engine-x) adalah web server open-source yang dikembangkan oleh Igor Sysoev pada 2004. Nginx awalnya dibuat untuk mengatasi masalah C10k, yaitu kemampuan server menangani 10.000 koneksi secara simultan.

Saat ini, Nginx menjadi andalan banyak perusahaan besar seperti Netflix, Airbnb, dan Dropbox karena efisiensi penggunaan sumber daya dan kemampuannya menangani traffic tinggi.

Folder Nginx:

/etc/nginx/
│
├─ nginx.conf # konfigurasi utama Nginx
├─ conf.d/ # folder untuk konfigurasi tambahan (*.conf)
├─ sites-available/ # folder untuk server block tersedia
├─ sites-enabled/ # folder untuk server block aktif (symlink ke sites-available)
├─ snippets/ # konfigurasi potongan reusable (misal fastcgi-php.conf)
└─ modules-enabled/ # modul Nginx yang diaktifkan

Keunggulan Nginx

Berikut beberapa alasan mengapa Nginx menjadi pilihan utama:

  • Performa Tinggi: Menggunakan arsitektur event-driven sehingga mampu menangani ribuan koneksi simultan dengan memori minimal.
  • Ringan dan Stabil: Menggunakan sumber daya lebih sedikit, stabil saat trafik tinggi atau serangan DDoS.
  • Reverse Proxy dan Load Balancer: Mendukung load balancing round-robin, least connections, dan IP hash.
  • Mendukung HTTP/2 dan HTTPS: Protokol modern untuk performa dan keamanan.
  • Konfigurasi Fleksibel: File teks sederhana untuk routing, caching, hingga keamanan.
  • Static File Handling Cepat: Efisien menyajikan file statis seperti gambar, CSS, JS.

Instalasi Nginx

Berikut langkah-langkah instalasi Nginx di Linux (Ubuntu/Debian):

1. Update Sistem

sudo apt update
sudo apt upgrade -y

2. Instal Nginx

sudo apt install nginx -y

3. Cek Status Nginx

sudo systemctl status nginx

4. Mengaktifkan Nginx Saat Boot

sudo systemctl enable nginx

Konfigurasi Nginx

Ini adalah setingan Default Nginx bisa dimaksimalkan sesuai kebutuhan.

File nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

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

    gzip on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Server Block Default

Ini adalah host server bawaan secara umum akan tayang di IP / name_server secara langsung setelah proses install selesai.

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    server_name _;

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

Add domain | Host Baru di Nginx

Buka folder dan buat file baru /etc/nginx/sites-available/. contoh: example.com.conf

READ :  Mode Event MPM di Apache2: Skalabilitas Tinggi untuk Trafik Besar

1. Create Blok Server

server {
listen 80;
server_name example.com www.example.com;

root /var/www/example.com;
index index.html index.php;

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

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

location ~ /\.ht { deny all; }
}

Ket: kode ini ubah versi php server kamu “fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;”.

2. Mengaktifkan Blok Server

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf
sudo nginx -t
sudo systemctl restart nginx

Pengaturan Keamanan Dasar

1. HTTPS dengan Let’s Encrypt (GRATIS)

sudo apt update
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx

2. Membatasi Akses

location /admin {
    allow 192.168.1.0/24;
    deny all;
}

3. Mencegah Serangan Brute Force

limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 10;

Optimasi Performa

1. Caching

Gunakan fastcgi_cache atau proxy_cache untuk mengurangi beban server.

2. Gzip Compression

gzip on;
gzip_types text/plain application/javascript text/css application/json;

3. Keep-Alive

keepalive_timeout 65;

Konfigurasi Nginx untuk WordPress (Gantikan .htaccess)

WordPress biasanya menggunakan .htaccess di Apache untuk mengatur URL *pretty permalink*. Di Nginx, kita harus menggunakan try_files:

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/wordpress;
    index index.php index.html index.htm;

    # Menangani permalink WordPress
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # Memproses PHP
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;  # sesuaikan versi PHP
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Menyembunyikan file .htaccess
    location ~ /\.ht {
        deny all;
    }
}

Konfigurasi Nginx untuk CodeIgniter (Versi Biasa)

CodeIgniter biasanya menggunakan .htaccess untuk menghapus index.php dari URL. Di Nginx, kita gunakan:

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/codeigniter;
    index index.php index.html index.htm;

    # Menangani URL tanpa index.php
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # Memproses PHP
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;  # sesuaikan versi PHP
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Menyembunyikan file .htaccess
    location ~ /\.ht {
        deny all;
    }
}

Penjelasan:

  • try_files $uri $uri/ /index.php?$args → Mengganti fungsi rewrite Apache untuk WordPress atau CodeIgniter.
  • fastcgi_pass → Pastikan sesuai dengan versi PHP-FPM di server.
  • deny all → Mencegah akses ke file .ht (tidak digunakan di Nginx tapi aman untuk di-block).

Pengaturan Cache File Aset di Nginx

Untuk meningkatkan performa, Nginx dapat menyimpan cache file statis seperti CSS, JS, gambar, dan font di browser pengguna dengan menambahkan header Expires dan Cache-Control.

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.php index.html index.htm;

    # Cache file statis
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    # Cache untuk file media lebih lama (misal video, pdf)
    location ~* \.(mp4|pdf)$ {
        expires 60d;
        add_header Cache-Control "public, no-transform";
    }

    # Proses PHP (WordPress atau CodeIgniter)
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Menyembunyikan file .htaccess
    location ~ /\.ht {
        deny all;
    }
}

Penjelasan:

  • expires 30d; → Memberitahu browser untuk menyimpan cache file selama 30 hari.
  • add_header Cache-Control "public, no-transform"; → Mengizinkan cache publik dan mencegah modifikasi file di perjalanan.
  • Ekstensi file bisa ditambah sesuai kebutuhan, misal svg, webp, atau eot.

FAQs

  • Apa perbedaan Nginx dan Apache? Nginx lebih ringan dan cepat untuk static content. Apache lebih fleksibel untuk modul PHP langsung.
  • Bisakah Nginx digunakan untuk WordPress? Ya, perlu konfigurasi try_files $uri $uri/ /index.php?$args;.
  • Bagaimana memantau performa Nginx? Gunakan
    sudo tail -f /var/log/nginx/access.log

    dan

    sudo tail -f /var/log/nginx/error.log

    atau alat monitoring seperti Grafana + Prometheus.

  • Apakah Nginx bisa dijalankan di Windows? Ya, tetapi performa lebih optimal di Linux.
  • Bagaimana mengatasi 502 Bad Gateway? Pastikan backend server (misal PHP-FPM) berjalan dan port sesuai konfigurasi Nginx.

Kesimpulan

Jangan lupa setiap ada perubahan kode Nginx harus direload atau restart sehingga perubahan pada setingan bisa langsung diaplikasikan oleh sistem.

Nginx adalah web server modern yang andal, cepat, dan hemat sumber daya. Keunggulannya mencakup performa tinggi, kemampuan load balancing, dan fleksibilitas konfigurasi.

Instalasi dan pengaturan dasar Nginx cukup mudah, terutama di Linux. Dengan mengikuti praktik keamanan dan optimasi, Nginx bisa menjadi fondasi yang kuat untuk website atau aplikasi Anda.

READ :  Migrasi PHP Apache (mod_php) ke PHP-FPM + Apache MPM Event