Cara Menyiapkan dan Mengkonfigurasi Nginx di Ubuntu: Panduan Lengkap
Nginx adalah server web open-source yang populer dan banyak digunakan, reverse proxy, load balancer, dan HTTP cache. Dikenal karena kinerjanya yang tinggi, stabilitas, fitur yang kaya, konfigurasi sederhana, dan penggunaan sumber daya yang rendah. Panduan ini akan memandu Anda melalui proses langkah demi langkah tentang cara menginstal, mengonfigurasi, dan mengoptimalkan Nginx di Ubuntu.
Mengapa Memilih Nginx?
Sebelum kita membahas cara instalasinya, mari kita bahas mengapa Nginx menjadi pilihan populer:
- Kinerja Tinggi: Nginx dirancang untuk menangani lalu lintas tinggi dan memberikan waktu respons yang cepat.
- Stabilitas: Nginx sangat stabil dan dapat diandalkan, menjadikannya pilihan yang sangat baik untuk aplikasi penting.
- Fitur Kaya: Nginx menawarkan berbagai fitur, termasuk reverse proxy, load balancing, HTTP caching, dan lainnya.
- Konfigurasi Sederhana: File konfigurasi Nginx mudah dibaca dan dipahami, sehingga mudah untuk dikonfigurasi.
- Penggunaan Sumber Daya Rendah: Nginx menggunakan sumber daya yang lebih sedikit daripada server web lainnya, menjadikannya pilihan yang sangat baik untuk server dengan sumber daya terbatas.
Prasyarat
Sebelum Anda memulai, pastikan Anda memiliki yang berikut:
- Server Ubuntu (disarankan Ubuntu 20.04 atau yang lebih baru).
- Akses root atau hak sudo ke server.
- Koneksi internet aktif.
Langkah 1: Memperbarui Indeks Paket
Langkah pertama adalah memperbarui indeks paket untuk memastikan Anda memiliki versi terbaru dari semua paket. Buka terminal Anda dan jalankan perintah berikut:
sudo apt update
Langkah 2: Menginstal Nginx
Setelah indeks paket diperbarui, Anda dapat menginstal Nginx dengan menjalankan perintah berikut:
sudo apt install nginx
Perintah ini akan menginstal Nginx dan semua dependensinya.
Langkah 3: Mengelola Layanan Nginx
Setelah Nginx terinstal, Anda dapat mengelola layanan menggunakan perintah systemctl
.
Perintah Umum Systemctl Nginx
- Memulai Nginx:
sudo systemctl start nginx
- Menghentikan Nginx:
sudo systemctl stop nginx
- Mereset Nginx:
sudo systemctl restart nginx
- Memuat ulang Nginx:
sudo systemctl reload nginx
(memuat ulang konfigurasi tanpa mengganggu koneksi) - Memeriksa status Nginx:
sudo systemctl status nginx
- Mengaktifkan Nginx saat boot:
sudo systemctl enable nginx
- Menonaktifkan Nginx saat boot:
sudo systemctl disable nginx
Langkah 4: Mengizinkan Nginx melalui Firewall
Jika Anda memiliki firewall aktif (seperti UFW), Anda perlu mengizinkan lalu lintas Nginx melaluinya. Nginx mendaftarkan dirinya sebagai aplikasi dengan UFW, sehingga Anda dapat mengizinkan lalu lintas dengan mudah.
Menggunakan UFW
- Periksa status UFW:
sudo ufw status
- Izinkan lalu lintas HTTP (port 80):
sudo ufw allow 'Nginx HTTP'
- Izinkan lalu lintas HTTPS (port 443):
sudo ufw allow 'Nginx HTTPS'
- Izinkan lalu lintas Nginx (HTTP dan HTTPS):
sudo ufw allow 'Nginx Full'
- Aktifkan UFW jika belum aktif:
sudo ufw enable
Langkah 5: Memverifikasi Instalasi Nginx
Untuk memverifikasi bahwa Nginx terinstal dengan benar, buka browser web Anda dan navigasikan ke alamat IP server Anda. Anda akan melihat halaman default Nginx.
Anda dapat menemukan alamat IP publik server Anda dengan menjalankan perintah berikut:
ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1
Atau, Anda dapat menggunakan layanan eksternal:
curl -4 icanhazip.com
Jika Anda melihat halaman default Nginx, itu berarti Nginx terinstal dan berfungsi dengan benar.
Struktur File Konfigurasi Nginx
Memahami struktur file konfigurasi Nginx sangat penting untuk mengkonfigurasi server web Anda secara efektif. Berikut adalah direktori dan file kunci:
/etc/nginx/
: Direktori konfigurasi utama Nginx./etc/nginx/nginx.conf
: File konfigurasi utama Nginx./etc/nginx/conf.d/
: Direktori untuk cuplikan konfigurasi. File-file dalam direktori ini disertakan dalamnginx.conf
./etc/nginx/sites-available/
: Direktori yang berisi file konfigurasi untuk setiap situs web./etc/nginx/sites-enabled/
: Direktori yang berisi tautan simbolis ke file konfigurasi dalamsites-available
. Nginx hanya akan melayani situs web yang tautan simbolisnya ada di direktori ini./var/log/nginx/access.log
: File log akses Nginx./var/log/nginx/error.log
: File log kesalahan Nginx./usr/share/nginx/html/
: Direktori default untuk file web.
Konfigurasi Dasar Nginx
Mari kita lihat beberapa konfigurasi dasar Nginx.
File Konfigurasi Utama: nginx.conf
File nginx.conf
berisi pengaturan global untuk server Nginx Anda. Berikut adalah contoh file nginx.conf
:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Berikut adalah penjelasan singkat tentang beberapa arahan penting dalam file nginx.conf
:
user
: Pengguna yang menjalankan proses Nginx.worker_processes
: Jumlah proses pekerja yang dijalankan Nginx.auto
akan secara otomatis menyesuaikan jumlah proses pekerja ke jumlah inti CPU.events
: Bagian ini berisi pengaturan yang memengaruhi bagaimana Nginx menangani koneksi.http
: Bagian ini berisi pengaturan untuk server HTTP.include
: Arahan ini menyertakan file konfigurasi lain.
Menyiapkan Blok Server (Virtual Host)
Blok server (atau virtual host) memungkinkan Anda untuk menghosting lebih dari satu situs web di satu server. Setiap blok server menentukan konfigurasi untuk situs web tertentu.
Membuat Blok Server Baru
- Buat file konfigurasi baru di
/etc/nginx/sites-available/
. Sebagai contoh, mari kita buat file bernamaexample.com
:sudo nano /etc/nginx/sites-available/example.com
- Tambahkan konfigurasi blok server berikut ke file:
server { listen 80; server_name example.com www.example.com; root /var/www/example.com; index index.html index.htm; location / { try_files $uri $uri/ =404; } access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; }
Ganti
example.com
dengan nama domain Anda dan/var/www/example.com
dengan direktori root untuk situs web Anda. - Buat tautan simbolis dari file konfigurasi di
sites-available
kesites-enabled
:sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
- Buat direktori root untuk situs web Anda:
sudo mkdir -p /var/www/example.com
- Buat file
index.html
di direktori root situs web Anda:sudo nano /var/www/example.com/index.html
Tambahkan beberapa HTML dasar ke file:
<!DOCTYPE html> <html> <head> <title>Selamat Datang di Example.com</title> </head> <body> <h1>Selamat Datang di Example.com!</h1> <p>Nginx berhasil dikonfigurasi!</p> </body> </html>
- Ubah kepemilikan direktori root situs web ke pengguna
www-data
:sudo chown -R www-data:www-data /var/www/example.com
- Muat ulang Nginx untuk mengaktifkan perubahan:
sudo systemctl reload nginx
Sekarang, jika Anda mengunjungi example.com
di browser web Anda, Anda akan melihat halaman web yang Anda buat.
Konfigurasi Umum Blok Server
Berikut adalah beberapa arahan umum yang dapat Anda gunakan dalam blok server:
listen
: Menentukan port yang harus didengarkan Nginx.server_name
: Menentukan nama domain atau nama host untuk blok server.root
: Menentukan direktori root untuk situs web.index
: Menentukan file yang harus disajikan jika direktori diminta.location
: Menentukan konfigurasi untuk lokasi tertentu di situs web.access_log
: Menentukan file yang harus digunakan untuk mencatat permintaan akses.error_log
: Menentukan file yang harus digunakan untuk mencatat kesalahan.
Keamanan Nginx
Keamanan adalah aspek penting dalam mengkonfigurasi Nginx. Berikut adalah beberapa tips untuk mengamankan instalasi Nginx Anda:
1. Memperbarui Nginx
Penting untuk menjaga Nginx Anda tetap mutakhir untuk memastikan Anda memiliki perbaikan keamanan terbaru. Anda dapat memperbarui Nginx dengan menjalankan perintah berikut:
sudo apt update
sudo apt upgrade nginx
2. Menonaktifkan Daftar Direktori
Daftar direktori memungkinkan penyerang untuk melihat isi direktori web Anda. Menonaktifkan daftar direktori dengan menambahkan arahan berikut ke blok server Anda:
autoindex off;
3. Menyembunyikan Versi Nginx
Menyembunyikan versi Nginx Anda dapat membantu mencegah penyerang menargetkan server Anda dengan kerentanan khusus versi. Tambahkan arahan berikut ke file nginx.conf
Anda:
server_tokens off;
4. Mengonfigurasi Batas Ukuran Unggahan
Anda dapat mengkonfigurasi batas ukuran unggahan untuk mencegah penyerang mengunggah file besar yang dapat menyebabkan penolakan layanan. Tambahkan arahan berikut ke blok server Anda:
client_max_body_size 2M;
Ini akan membatasi ukuran unggahan ke 2MB.
5. Mengimplementasikan SSL/TLS
Menggunakan SSL/TLS mengenkripsi lalu lintas antara server web Anda dan klien, memberikan lapisan keamanan tambahan. Anda dapat mengamankan Nginx dengan menggunakan Let’s Encrypt.
Mendapatkan Sertifikat SSL dengan Let’s Encrypt
- Instal Certbot:
sudo apt install certbot python3-certbot-nginx
- Jalankan Certbot untuk mendapatkan dan menginstal sertifikat SSL Anda:
sudo certbot --nginx -d example.com -d www.example.com
Ganti
example.com
dengan nama domain Anda. Certbot akan secara otomatis mengkonfigurasi Nginx untuk menggunakan sertifikat SSL.
Setelah SSL dikonfigurasi, pastikan untuk mengalihkan semua lalu lintas HTTP ke HTTPS dengan menambahkan arahan berikut ke blok server Anda:
return 301 https://$host$request_uri;
6. Membatasi Tingkat Permintaan
Membatasi tingkat permintaan dapat membantu mencegah penolakan serangan layanan. Anda dapat membatasi tingkat permintaan menggunakan modul ngx_http_limit_req_module
.
- Tentukan zona pembatas tingkat di blok
http
dari filenginx.conf
Anda:http { ... limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s; ... }
Ini akan membuat zona bernama
mylimit
yang membatasi setiap alamat IP ke 10 permintaan per detik. - Terapkan pembatas tingkat ke lokasi tertentu di blok server Anda:
server { ... location / { limit_req zone=mylimit burst=20 nodelay; ... } ... }
Ini akan menerapkan pembatas tingkat ke semua permintaan ke lokasi akar. Parameter
burst
menentukan jumlah permintaan yang diizinkan untuk “burst” di atas batas yang ditetapkan.
Optimasi Kinerja Nginx
Mengoptimalkan kinerja Nginx dapat meningkatkan kecepatan dan skalabilitas situs web Anda. Berikut adalah beberapa tips untuk mengoptimalkan kinerja Nginx:
1. Aktifkan Gzip Compression
Gzip compression mengurangi ukuran respons HTTP, yang dapat meningkatkan kecepatan situs web Anda. Aktifkan Gzip compression dengan menambahkan arahan berikut ke file nginx.conf
Anda:
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
2. Aktifkan HTTP/2
HTTP/2 adalah versi protokol HTTP yang lebih baru dan lebih efisien. Aktifkan HTTP/2 dengan menambahkan arahan berikut ke blok server Anda:
listen 443 ssl http2;
Ini mengharuskan Anda memiliki SSL/TLS yang dikonfigurasi.
3. Gunakan Caching Browser
Caching browser memungkinkan browser untuk menyimpan sumber daya statis, seperti gambar dan file JavaScript, sehingga tidak perlu mengunduhnya setiap kali halaman web diminta. Anda dapat mengaktifkan caching browser dengan menambahkan arahan berikut ke blok server Anda:
location ~* \.(jpg|jpeg|png|gif|svg|js|css|eot|woff|woff2|ttf)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
Ini akan mengaktifkan caching browser selama 30 hari untuk file dengan ekstensi yang ditentukan.
4. Fine-Tune Worker Processes
Nilai default untuk worker_processes
adalah auto
, yang secara otomatis menyesuaikan jumlah proses pekerja dengan jumlah inti CPU. Namun, Anda dapat secara manual fine-tune nilai ini untuk mengoptimalkan kinerja. Sebagai aturan praktis, atur worker_processes
ke jumlah inti CPU Anda.
5. Gunakan Load Balancing
Load balancing mendistribusikan lalu lintas di beberapa server, yang dapat meningkatkan skalabilitas dan ketersediaan situs web Anda. Nginx dapat digunakan sebagai load balancer. Berikut adalah contoh konfigurasi load balancing:
upstream backend {
server server1.example.com;
server server2.example.com;
}
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Ini akan mendistribusikan lalu lintas antara dua server, server1.example.com
dan server2.example.com
.
Memecahkan Masalah Nginx
Jika Anda mengalami masalah dengan Nginx, ada beberapa hal yang dapat Anda lakukan untuk memecahkan masalah tersebut.
1. Periksa Log Kesalahan
File log kesalahan Nginx adalah tempat yang baik untuk memulai saat memecahkan masalah. File log kesalahan terletak di /var/log/nginx/error.log
. Periksa file log untuk kesalahan atau peringatan yang dapat memberikan petunjuk tentang penyebab masalah.
2. Periksa File Konfigurasi
Pastikan file konfigurasi Anda bebas kesalahan. Anda dapat menguji file konfigurasi Anda untuk kesalahan dengan menjalankan perintah berikut:
sudo nginx -t
Perintah ini akan memeriksa sintaks file konfigurasi Anda dan melaporkan kesalahan apa pun.
3. Muat Ulang Nginx
Setelah Anda membuat perubahan pada file konfigurasi Anda, Anda perlu memuat ulang Nginx agar perubahan tersebut diterapkan. Anda dapat memuat ulang Nginx dengan menjalankan perintah berikut:
sudo systemctl reload nginx
4. Restart Nginx
Jika memuat ulang Nginx tidak menyelesaikan masalah, coba restart Nginx. Anda dapat mereset Nginx dengan menjalankan perintah berikut:
sudo systemctl restart nginx
5. Periksa Firewall
Pastikan firewall Anda tidak memblokir lalu lintas ke Nginx. Jika Anda menggunakan UFW, Anda dapat mengizinkan lalu lintas Nginx dengan menjalankan perintah berikut:
sudo ufw allow 'Nginx HTTP'
sudo ufw allow 'Nginx HTTPS'
6. Periksa Penggunaan Sumber Daya
Jika Nginx menggunakan terlalu banyak sumber daya, itu dapat menyebabkan masalah. Periksa penggunaan sumber daya server Anda menggunakan perintah seperti top
atau htop
. Jika Nginx menggunakan terlalu banyak CPU atau memori, Anda mungkin perlu mengoptimalkan konfigurasi Nginx atau meningkatkan sumber daya server Anda.
Kesimpulan
Dalam panduan lengkap ini, kita telah membahas cara menyiapkan dan mengkonfigurasi Nginx di Ubuntu. Kita telah membahas cara menginstal Nginx, mengelola layanan, mengkonfigurasi blok server, mengamankan Nginx, mengoptimalkan kinerja Nginx, dan memecahkan masalah Nginx. Dengan mengikuti langkah-langkah ini, Anda dapat mengkonfigurasi Nginx untuk melayani situs web dan aplikasi web Anda dengan andal dan efisien.
Nginx adalah server web yang hebat dan fleksibel yang dapat digunakan untuk berbagai tujuan. Dengan memahami cara mengkonfigurasi Nginx, Anda dapat membuka potensinya dan membuat aplikasi web yang berperforma tinggi dan aman.
Semoga berhasil dengan proyek Nginx Anda!
“`