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:
| Aspek | Nginx | Apache |
|---|---|---|
| Laravel | Sangat cocok | Sangat cocok |
| PHP-FPM | Sangat umum | Didukung |
| Static files | Sangat baik | Sangat baik |
.htaccess | Tidak didukung | Didukung |
| Konfigurasi | Terpusat | Fleksibel |
| Reverse proxy | Sangat baik | Didukung |
| Load balancing | Sangat baik | Didukung |
| Learning curve | Sedang | Sedang |
| Resource efficiency | Umumnya efisien | Tergantung konfigurasi |
| Ekosistem | Sangat luas | Sangat 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/. -
.envsudah 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_rewritetersedia jika diperlukan. -
.htaccessLaravel 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.
