Nginx vs Apache: Mana yang Lebih Cocok untuk Laravel di VPS?

Jika Anda ingin menjalankan aplikasi Laravel di VPS, salah satu keputusan yang perlu dibuat adalah memilih web server.

Dua nama yang paling sering muncul adalah Nginx dan Apache.

Keduanya sudah matang, populer, dan mampu menjalankan aplikasi Laravel dengan baik. Namun, cara kerja, konfigurasi, penggunaan resource, serta karakteristik keduanya cukup berbeda.

Pertanyaannya kemudian:

Untuk aplikasi Laravel di VPS, lebih baik menggunakan Nginx atau Apache?

Jawaban singkatnya: keduanya bisa, tetapi untuk banyak deployment Laravel modern di VPS, Nginx sering menjadi pilihan yang menarik karena konfigurasi yang sederhana untuk kebutuhan reverse proxy, static files, dan PHP-FPM.

Namun, Apache tetap merupakan pilihan yang sangat baik, terutama jika Anda membutuhkan .htaccess, kompatibilitas dengan konfigurasi Apache, atau sudah terbiasa dengan ekosistemnya.

Artikel ini membahas perbedaan Nginx dan Apache secara praktis agar Anda dapat menentukan pilihan sesuai kebutuhan.

Apa Itu Web Server?

Web server adalah software yang menerima request dari client, kemudian memberikan response.

Secara sederhana:

Browser
   ↓
HTTP/HTTPS Request
   ↓
Web Server
   ↓
Application
   ↓
HTTP Response
   ↓
Browser

Dalam deployment Laravel, web server biasanya berada di depan aplikasi PHP.

Contoh arsitektur:

Client
   ↓
Nginx / Apache
   ↓
PHP-FPM
   ↓
Laravel
   ↓
Database

Web server menangani request HTTP, file statis, SSL/TLS, dan meneruskan request PHP ke PHP-FPM.

Apa Itu Nginx?

 adalah web server yang juga banyak digunakan sebagai reverse proxy dan load balancer.

Nginx dirancang untuk menangani banyak koneksi secara efisien dengan model event-driven.

Salah satu karakteristik penting Nginx adalah kemampuannya menangani static files dan koneksi dalam jumlah besar dengan penggunaan resource yang relatif efisien.

Dalam deployment Laravel, Nginx biasanya digunakan bersama PHP-FPM.

Arsitekturnya:

Browser
   ↓
Nginx
   ↓
PHP-FPM
   ↓
Laravel

Apa Itu Apache?

 adalah web server open-source yang sudah digunakan selama puluhan tahun.

Apache memiliki ekosistem modul yang sangat luas dan mendukung berbagai pola konfigurasi.

Salah satu fitur yang sangat dikenal adalah .htaccess.

Dengan .htaccess, konfigurasi tertentu dapat ditempatkan pada direktori aplikasi tanpa harus mengubah konfigurasi utama server.

Untuk Laravel, Apache juga dapat menggunakan PHP-FPM:

Browser
   ↓
Apache
   ↓
PHP-FPM
   ↓
Laravel

Jadi, memilih Apache tidak berarti Anda harus menjalankan PHP dengan model lama.

Laravel Membutuhkan Web Server Apa?

Laravel tidak secara khusus mengharuskan Nginx atau Apache.

Laravel adalah framework PHP sehingga aplikasi dapat dijalankan menggunakan berbagai web server yang mampu menangani request PHP sesuai konfigurasi.

Yang penting adalah web server diarahkan ke direktori:

public/

bukan ke root project Laravel.

Contoh:

/var/www/example.com/
├── app/
├── bootstrap/
├── config/
├── database/
├── resources/
├── routes/
├── storage/
├── vendor/
└── public/

Document root seharusnya:

/var/www/example.com/public

Bukan:

/var/www/example.com

Hal ini penting untuk keamanan karena file internal seperti .env tidak boleh dapat diakses langsung melalui web.

Perbedaan Arsitektur Nginx dan Apache

Perbedaan mendasar terdapat pada bagaimana keduanya menangani koneksi dan request.

Nginx menggunakan pendekatan event-driven dan asynchronous.

Apache memiliki beberapa model processing, termasuk event-based dan process/thread-based tergantung konfigurasi serta MPM yang digunakan.

Karena itu, membandingkan Apache hanya sebagai “server lama” dan Nginx sebagai “server baru” merupakan penyederhanaan yang tidak tepat.

Keduanya sudah berkembang jauh.

Nginx vs Apache untuk Laravel

Berikut perbandingan singkat:

AspekNginxApache
LaravelSangat cocokSangat cocok
PHP-FPMSangat umumDidukung
Static filesSangat baikSangat baik
.htaccessTidak didukungDidukung
KonfigurasiTerpusatFleksibel
Reverse proxySangat baikDidukung
Load balancingSangat baikDidukung
Learning curveSedangSedang
Resource efficiencyUmumnya efisienTergantung konfigurasi
EkosistemSangat luasSangat luas

Tidak ada pemenang mutlak untuk semua kondisi.

Nginx untuk Laravel

Untuk deployment Laravel di VPS, Nginx merupakan pilihan yang sangat populer.

Contoh konfigurasi sederhananya:

server {
    listen 80;
    server_name example.com;

    root /var/www/example.com/public;

    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }
}

Versi PHP-FPM harus disesuaikan dengan versi PHP yang terpasang di server.

Bagian penting untuk Laravel adalah:

root /var/www/example.com/public;

dan:

try_files $uri $uri/ /index.php?$query_string;

Request yang tidak cocok dengan file atau direktori kemudian diarahkan ke index.php.

Mengapa public/ Penting?

Laravel menggunakan public/index.php sebagai entry point aplikasi.

Contoh:

Request
   ↓
Nginx
   ↓
public/index.php
   ↓
Laravel
   ↓
Controller
   ↓
Response

Dengan document root diarahkan ke public, file seperti:

.env
artisan
composer.json
composer.lock

tidak ditempatkan di web root.

Ini merupakan salah satu bagian penting dalam deployment Laravel yang aman.

Apache untuk Laravel

Apache juga dapat digunakan dengan Laravel.

Contoh VirtualHost:

<VirtualHost *:80>
    ServerName example.com

    DocumentRoot /var/www/example.com/public

    <Directory /var/www/example.com/public>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Laravel biasanya menggunakan file:

public/.htaccess

untuk membantu routing request.

Contoh alur:

Request /products
      ↓
Apache
      ↓
public/.htaccess
      ↓
public/index.php
      ↓
Laravel Router

Inilah salah satu keunggulan Apache jika Anda membutuhkan konfigurasi berbasis .htaccess.

Apa Itu .htaccess?

.htaccess adalah file konfigurasi Apache yang dapat digunakan pada direktori tertentu.

Contohnya:

public/.htaccess

Laravel menggunakan mekanisme ini pada konfigurasi Apache untuk mengarahkan request ke index.php.

Nginx tidak membaca .htaccess.

Jika Anda berpindah dari Apache ke Nginx, aturan .htaccess perlu diterjemahkan ke konfigurasi Nginx.

Nginx Tidak Mendukung .htaccess

Ini bukan kekurangan mutlak.

Justru salah satu karakteristik Nginx adalah konfigurasi biasanya dikelola secara terpusat.

Pada Apache:

.htaccess
.htaccess
.htaccess

dapat ditemukan di berbagai direktori.

Pada Nginx, aturan biasanya berada pada konfigurasi server.

Pendekatan tersebut dapat membuat konfigurasi lebih mudah dikontrol dari sisi administrator server.

Mana yang Lebih Cepat?

Pertanyaan “mana yang lebih cepat?” tidak memiliki jawaban universal.

Performa dipengaruhi oleh banyak faktor:

  • hardware VPS,
  • jumlah RAM,
  • CPU,
  • konfigurasi web server,
  • PHP-FPM,
  • OPcache,
  • database,
  • query SQL,
  • caching,
  • ukuran response,
  • jumlah concurrent request,
  • aplikasi Laravel itu sendiri.

Mengganti Apache dengan Nginx tidak otomatis membuat aplikasi Laravel menjadi jauh lebih cepat.

Jika bottleneck sebenarnya adalah query database yang lambat, mengganti web server mungkin hampir tidak memberikan dampak.

Nginx Unggul untuk Static Files

Nginx sangat cocok untuk melayani file statis seperti:

CSS
JavaScript
images
fonts
favicon

Misalnya request:

GET /build/assets/app.css

dapat dilayani langsung oleh Nginx tanpa perlu menjalankan PHP.

Hal ini mengurangi pekerjaan yang harus dilakukan Laravel.

PHP-FPM Tetap Penting

Nginx sendiri tidak menjalankan PHP.

Untuk Laravel, Nginx biasanya bekerja bersama PHP-FPM.

Arsitekturnya:

Browser
   ↓
Nginx
   ↓
PHP-FPM
   ↓
PHP
   ↓
Laravel

PHP-FPM bertugas menjalankan proses PHP dan menangani request yang diteruskan oleh web server.

Apache dan PHP-FPM

Apache juga dapat bekerja dengan PHP-FPM.

Jadi arsitektur modern dapat menjadi:

Browser
   ↓
Apache
   ↓
PHP-FPM
   ↓
Laravel

Dengan demikian, perbandingan Nginx vs Apache tidak selalu berarti:

Nginx + PHP-FPM
vs
Apache + mod_php

Apache juga dapat menggunakan PHP-FPM.

Kelebihan Nginx untuk Laravel

Beberapa alasan memilih Nginx:

  • Konfigurasi Laravel relatif straightforward.
  • Sangat baik untuk static files.
  • Cocok sebagai reverse proxy.
  • Cocok untuk arsitektur modern.
  • Dapat digunakan sebagai load balancer.
  • Efisien dalam menangani banyak koneksi.
  • Banyak digunakan dalam deployment aplikasi PHP modern.

Nginx juga sangat cocok ketika aplikasi nantinya berkembang menjadi beberapa service.

Kekurangan Nginx

Nginx juga memiliki beberapa konsekuensi.

Pertama, tidak ada .htaccess.

Artinya aturan Apache tidak bisa langsung dipindahkan.

Kedua, konfigurasi biasanya membutuhkan akses administrator.

Jika developer terbiasa mengatur redirect menggunakan .htaccess, pendekatan Nginx mungkin terasa berbeda.

Kelebihan Apache untuk Laravel

Apache memiliki beberapa keunggulan:

  • Ekosistem sangat matang.
  • Dukungan .htaccess.
  • Banyak tutorial dan konfigurasi tersedia.
  • Fleksibel melalui modul.
  • Cocok untuk hosting dengan banyak aplikasi.
  • Mudah digunakan jika aplikasi sebelumnya sudah berjalan di Apache.

Untuk tim yang sudah memiliki banyak konfigurasi Apache, migrasi ke Nginx belum tentu memberikan keuntungan yang sebanding dengan effort migrasinya.

Kekurangan Apache

Apache dapat menggunakan resource lebih tinggi tergantung MPM dan konfigurasi yang digunakan.

Namun, pernyataan bahwa Apache selalu lebih boros daripada Nginx juga terlalu sederhana.

Apache versi modern memiliki model processing yang jauh lebih baik dibandingkan gambaran Apache lama yang sering diasosiasikan dengan prefork.

Karena itu, konfigurasi aktual harus menjadi dasar evaluasi.

Bagaimana dengan VPS RAM 1 GB?

Jika Anda menggunakan VPS kecil, resource efficiency menjadi lebih penting.

Misalnya VPS dengan:

1 vCPU
1 GB RAM
20 GB SSD

Anda perlu memperhatikan seluruh stack:

Nginx / Apache
PHP-FPM
Laravel
Database
Queue worker
Cron
OS

Memilih Nginx saja tidak cukup.

PHP-FPM dan database juga dapat menggunakan memory yang signifikan.

Untuk VPS kecil, optimasi yang lebih penting antara lain:

  • jumlah PHP-FPM worker,
  • OPcache,
  • database configuration,
  • queue worker,
  • caching,
  • log management,
  • swap,
  • jumlah service yang berjalan.

Kapan Sebaiknya Memilih Nginx?

Nginx cocok jika Anda:

  • Membuat VPS baru dari awal.
  • Menjalankan Laravel dengan PHP-FPM.
  • Membutuhkan reverse proxy.
  • Menyajikan banyak static files.
  • Berencana menggunakan beberapa application server.
  • Ingin konfigurasi server yang terpusat.
  • Membutuhkan load balancing di masa depan.

Untuk deployment Laravel baru, Nginx merupakan pilihan yang sangat masuk akal.

Kapan Sebaiknya Memilih Apache?

Apache cocok jika:

  • Infrastruktur Anda sudah menggunakan Apache.
  • Anda membutuhkan .htaccess.
  • Tim sudah terbiasa dengan Apache.
  • Ada aplikasi legacy yang bergantung pada konfigurasi Apache.
  • Hosting environment Anda sudah dirancang untuk Apache.
  • Migrasi ke Nginx tidak memberikan keuntungan yang signifikan.

Tidak ada alasan mengganti server yang stabil hanya karena Nginx sedang populer.

Nginx sebagai Reverse Proxy

Salah satu kelebihan Nginx adalah kemampuannya menjadi reverse proxy.

Contoh:

Internet
   ↓
Nginx
   ↓
Laravel Application

Pada arsitektur yang lebih kompleks:

                    ┌── Laravel Server 1
Internet → Nginx ───┼── Laravel Server 2
                    └── Laravel Server 3

Nginx dapat menerima request dari client kemudian meneruskannya ke backend.

Ini menjadi sangat berguna ketika aplikasi berkembang.

SSL HTTPS

Baik Nginx maupun Apache dapat digunakan untuk HTTPS.

Arsitektur:

Browser
   ↓
HTTPS :443
   ↓
Nginx / Apache
   ↓
PHP-FPM
   ↓
Laravel

Dalam deployment modern, HTTPS sebaiknya digunakan untuk aplikasi production.

Selain enkripsi, HTTPS juga diperlukan untuk berbagai fitur web modern dan meningkatkan keamanan komunikasi antara client dan server.

Redirect HTTP ke HTTPS

Contoh pada Nginx:

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

    return 301 https://example.com$request_uri;
}

Konfigurasi aktual harus disesuaikan dengan domain dan sertifikat yang digunakan.

Pada Apache, redirect dapat dilakukan melalui konfigurasi VirtualHost atau .htaccess.

Virtual Host dan Server Block

Istilahnya berbeda.

Apache menggunakan:

VirtualHost

Nginx menggunakan:

server block

Tujuannya serupa: memungkinkan satu server menangani beberapa website.

Contoh:

Server
├── example.com
├── blog.example.com
└── api.example.com

Masing-masing dapat memiliki konfigurasi sendiri.

Nginx vs Apache dalam Multi-Site VPS

Misalnya satu VPS menjalankan:

example.com
blog.example.com
api.example.com
admin.example.com

Nginx dapat memiliki server block untuk masing-masing domain.

Contoh:

/etc/nginx/sites-available/
├── example.com
├── blog.example.com
└── api.example.com

Kemudian konfigurasi diaktifkan melalui mekanisme yang digunakan oleh instalasi Nginx.

Struktur ini sangat umum pada Ubuntu Server.

Jangan Lupa PHP-FPM Socket

Salah satu error yang sering muncul pada Nginx + Laravel adalah:

connect() to unix:/run/php/php8.3-fpm.sock failed

Penyebabnya dapat berupa:

  • PHP-FPM tidak berjalan.
  • Versi PHP berbeda.
  • Socket path salah.
  • PHP-FPM gagal start.

Periksa:

sudo systemctl status php8.3-fpm

Kemudian periksa socket:

ls /run/php/

Jika server menggunakan PHP versi lain, nama socket juga dapat berbeda.

Error 502 Bad Gateway

Jika Nginx menampilkan:

502 Bad Gateway

jangan langsung menyalahkan Laravel.

Periksa beberapa lapisan:

Nginx
 ↓
PHP-FPM
 ↓
Laravel

Mulai dengan:

sudo systemctl status nginx

Kemudian:

sudo systemctl status php8.3-fpm

Lalu periksa log:

sudo journalctl -u nginx -n 100

dan log PHP-FPM sesuai konfigurasi server.

Error 403 Forbidden

Jika mendapatkan:

403 Forbidden

kemungkinan penyebabnya antara lain:

  • permission salah,
  • ownership salah,
  • konfigurasi document root salah,
  • directory tidak dapat diakses,
  • aturan web server menolak request.

Untuk Laravel, pastikan document root mengarah ke:

/var/www/example.com/public

bukan root project.

Error 404 pada Route Laravel

Misalnya:

/

berhasil tetapi:

/products

menghasilkan 404 dari web server.

Salah satu hal yang perlu diperiksa pada Nginx adalah:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

Jika konfigurasi routing tidak benar, request dapat gagal mencapai Laravel.

Pada Apache, periksa .htaccess dan konfigurasi mod_rewrite.

Mana yang Lebih Mudah untuk Pemula?

Ini tergantung latar belakang.

Jika Anda sebelumnya sering menggunakan shared hosting, Apache mungkin terasa lebih familiar karena .htaccess banyak digunakan.

Jika Anda belajar deployment VPS modern dari awal, Nginx juga tidak terlalu sulit selama memahami konsep:

server block
document root
location
try_files
PHP-FPM

Yang penting bukan menghafalkan konfigurasi, tetapi memahami alur request.

Mana yang Lebih Cocok untuk Production?

Keduanya bisa digunakan untuk production.

Pilihan sebaiknya didasarkan pada:

Kebutuhan aplikasi
↓
Kompetensi tim
↓
Arsitektur server
↓
Maintenance
↓
Performance requirement

Jangan memilih hanya berdasarkan klaim bahwa salah satu “pasti lebih cepat”.

Rekomendasi untuk Laravel di VPS

Jika Anda membuat deployment Laravel baru di Ubuntu VPS dan tidak memiliki kebutuhan khusus, Nginx + PHP-FPM adalah pilihan yang sangat baik.

Arsitektur sederhananya:

Internet
   ↓
Nginx
   ↓
PHP-FPM
   ↓
Laravel
   ↓
MySQL / PostgreSQL

Tambahkan komponen lain sesuai kebutuhan:

Redis
Queue Worker
Scheduler
Supervisor / systemd
SSL
Firewall
Monitoring

Untuk aplikasi yang masih kecil, jangan menambahkan komponen hanya karena terlihat lebih “production”.

Mulailah dari stack yang sederhana dan mudah dipelihara.

Contoh Stack Laravel di Ubuntu VPS

Stack yang umum digunakan:

Ubuntu Server
      ↓
Nginx
      ↓
PHP-FPM
      ↓
Laravel
      ↓
MySQL / PostgreSQL

Kemudian:

Redis
  ↓
Cache / Queue

dan:

Cron
  ↓
Laravel Scheduler

Jika menggunakan queue worker, Anda juga membutuhkan proses worker yang berjalan terus-menerus dan mekanisme untuk memastikan worker dijalankan kembali ketika berhenti.

Checklist Deployment Laravel dengan Nginx

Sebelum aplikasi dianggap siap production, periksa:

  •  Domain sudah mengarah ke IP server.
  •  Nginx sudah terpasang.
  •  PHP dan PHP-FPM sudah terpasang.
  •  Composer tersedia.
  •  Project Laravel berada di lokasi yang benar.
  •  Document root mengarah ke public/.
  •  .env sudah dikonfigurasi.
  •  Database dapat diakses.
  •  Storage link sudah dibuat jika diperlukan.
  •  Permission dan ownership sudah benar.
  •  Nginx configuration sudah divalidasi.
  •  HTTPS sudah aktif.
  •  Firewall sudah dikonfigurasi.
  •  Queue worker sudah berjalan jika digunakan.
  •  Scheduler sudah dikonfigurasi jika diperlukan.
  •  Log dapat diperiksa.
  •  Backup sudah disiapkan.

Checklist Deployment Laravel dengan Apache

Jika menggunakan Apache:

  •  Apache sudah terpasang.
  •  PHP-FPM atau PHP runtime sudah dikonfigurasi.
  •  VirtualHost sudah dibuat.
  •  Document root mengarah ke public/.
  •  mod_rewrite tersedia jika diperlukan.
  •  .htaccess Laravel tersedia.
  •  Permission dan ownership benar.
  •  HTTPS sudah aktif.
  •  Firewall sudah dikonfigurasi.
  •  Queue dan scheduler dikonfigurasi jika diperlukan.
  •  Log Apache dan aplikasi dapat diperiksa.
  •  Backup sudah disiapkan.

Kesalahan yang Sering Terjadi

Beberapa kesalahan umum saat memilih atau mengkonfigurasi web server Laravel:

1. Document root mengarah ke root project

Salah:

/var/www/example.com

Lebih tepat:

/var/www/example.com/public

2. Menganggap Nginx membaca .htaccess

Nginx tidak menggunakan .htaccess.

Konfigurasi Apache harus diterjemahkan ke konfigurasi Nginx.

3. PHP-FPM tidak berjalan

Web server dapat berjalan normal tetapi Laravel tetap gagal jika PHP-FPM bermasalah.

4. Socket PHP-FPM salah

Contohnya konfigurasi menggunakan:

php8.2-fpm.sock

padahal server menjalankan PHP 8.3.

5. Mengubah permission menjadi 777

Ini bukan solusi umum untuk semua masalah permission dan dapat menimbulkan risiko keamanan.

6. Menganggap web server adalah satu-satunya bottleneck

Aplikasi Laravel bisa lambat karena:

Database
Query
PHP
External API
Queue
Storage
Network

bukan hanya Nginx atau Apache.

Apakah Bisa Menggunakan Nginx dan Apache Bersamaan?

Bisa.

Salah satu arsitektur:

Internet
   ↓
Nginx
   ↓
Apache
   ↓
Application

Nginx dapat digunakan sebagai reverse proxy di depan Apache.

Namun untuk aplikasi Laravel sederhana di satu VPS, konfigurasi seperti ini biasanya tidak diperlukan.

Setiap komponen tambahan berarti:

lebih banyak konfigurasi
lebih banyak log
lebih banyak service
lebih banyak potensi masalah

Gunakan kombinasi tersebut jika memang memiliki alasan arsitektural yang jelas.

Apakah Nginx Selalu Lebih Baik daripada Apache?

Tidak.

Nginx sangat bagus, tetapi “lebih bagus” bergantung pada kebutuhan.

Jika Anda membutuhkan .htaccess, memiliki banyak aplikasi lama yang bergantung pada Apache, atau tim sudah sangat familiar dengan Apache, Apache dapat menjadi pilihan yang lebih rasional.

Sebaliknya, jika Anda membangun VPS Laravel baru dan ingin menggunakan reverse proxy, static file serving, serta konfigurasi yang terpusat, Nginx merupakan pilihan yang sangat menarik.

Kesimpulan

Nginx dan Apache sama-sama dapat menjalankan Laravel dengan baik.

Perbedaan utamanya bukan sekadar masalah “mana yang lebih cepat”, tetapi bagaimana keduanya dikonfigurasi dan digunakan dalam arsitektur server.

Untuk Laravel di VPS:

Nginx cocok jika Anda menginginkan deployment modern dengan PHP-FPM, reverse proxy, static file serving, dan konfigurasi terpusat.

Apache cocok jika Anda membutuhkan .htaccess, kompatibilitas dengan aplikasi lama, atau sudah memiliki ekosistem Apache yang stabil.

Jika Anda membangun VPS baru khusus untuk Laravel tanpa kebutuhan legacy tertentu, rekomendasi praktisnya adalah:

Ubuntu Server
     ↓
Nginx
     ↓
PHP-FPM
     ↓
Laravel
     ↓
Database

Namun, jangan berharap mengganti Apache dengan Nginx otomatis membuat Laravel menjadi jauh lebih cepat.

Performance aplikasi tetap sangat dipengaruhi oleh kode Laravel, query database, PHP-FPM, caching, storage, network, dan resource VPS.

Pada akhirnya, web server yang paling baik adalah web server yang sesuai kebutuhan, dikonfigurasi dengan benar, aman, dan mudah Anda maintain.