Syslab.id – Tutorial kali ini kami akan membahas tentang Nginx web server di Ubuntu 22.04 LTS
Nginx dibaca (engine-x) adalah server web sumber terbuka (open source) dan gratis yang banyak digunakan oleh para pengembang dan administrator web di seluruh dunia.
Nginx adalah web server yang dibuat untuk mengatasi keterbatasan server web tradisional, seperti Apache. Pertama kali dirilis pada tahun 2004 oleh Igor Sysoev, seorang insinyur perangkat lunak asal Rusia. Nginx dirancang untuk menangani koneksi concurrent connections, yang membuatnya ideal untuk menyajikan konten statis dalam jumlah besar, serta untuk load balancing dan reverse proxy.
Salah satu fitur utama dari Nginx adalah kemampuannya untuk menangani sejumlah besar koneksi bersamaan. Hal ini membuatnya ideal untuk menyajikan konten statis dalam jumlah besar, serta untuk penyeimbangan beban dan proksi balik.
Untuk memahami Nginx, penting untuk memahami arsitekturnya. Nginx dibangun menggunakan model master-worker, di mana proses master bertugas menangani permintaan masuk dan mengelola proses worker yang sebenarnya memproses permintaan tersebut.
Nginx terdiri dari beberapa komponen utama, yaitu:
Secara sederhana, NGINX bekerja dengan menerima permintaan dari klien atau user (misalnya browser) dan memprosesnya lewat serangkaian modul dan konfigurasi untuk menyajikan konten yang sesuai. Jadi, kalau ada klien yang mengirim permintaan, NGINX akan nerima permintaan itu dan meneruskannya ke server block yang sesuai. Server block ini punya aturan tentang cara menangani permintaan tersebut.
Nginx menggunakan arsitektur multi-proses dan berbasis event, jadi bisa menangani permintaan dengan efisien. Begitu ada permintaan, Nginx bakal menyerahkannya ke proses worker, yang tugasnya memproses permintaan itu dan ngirim respons kembali ke klien. Dengan cara ini, Nginx bisa menangani banyak permintaan sekaligus tanpa gampang kewalahan.
Secara default Nginx sudah ada di repository Ubuntu 22.04 LTS dan dapat langsung di install. Terdapat 2 cara melakukan instalasi Nginx Web Server di Ubuntu 22.04 LTS diantaranya:
Untuk melakukan instalasi Nginx menggunakan default repository yang ada di Ubuntu 22.04 LTS sangatlah mudah Anda hanya perlu update sistem operasi Ubuntu dan proses install Nginx sebagai berikut:
root@syslab:~# apt update -y
root@syslab:~# apt install nginx -y
Untuk melakukan instalasi Nginx secara manual Anda perlu menginstall dependency yang dibutuhkan terlebih dahulu berikut
root@syslab:~# apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
Kemudian menambahkan Nginx signing key
root@syslab:~# curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg > /dev/null 2>&1
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 11809 100 11809 0 0 16275 0 --:--:-- --:--:-- --:--:-- 16265
root@syslab:~#
root@syslab:~# gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
pub rsa4096 2024-05-29 [SC]
8540A6F18833A80E9C1653A42FD21310B49F6B46
uid nginx signing key <signing-key-2@nginx.com>
pub rsa2048 2011-08-19 [SC] [expires: 2027-05-24]
573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid nginx signing key <signing-key@nginx.com>
pub rsa4096 2024-05-29 [SC]
9E9BE90EACBCDE69FE9B204CBCDCD8A38D88A2B3
uid nginx signing key <signing-key-3@nginx.com>
root@syslab:~#
root@syslab:~#
Jika sudah, tambahkan repository Nginx terlebih dahulu. Untuk repository Nginx Anda dapat menyesuaikan nya mau menggunakan yang stable version atau yang lainnya.
root@syslab:~# echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" | tee /etc/apt/sources.list.d/nginx.list
deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu jammy nginx
root@syslab:~#
Konfigurasi priority repository Nginx
root@syslab:~# echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | tee /etc/apt/preferences.d/99nginx
Package: *
Pin: origin nginx.org
Pin: release o=nginx
Pin-Priority: 900
root@syslab:~#
Update sistem operasi Ubuntu Anda kemudian install Nginx menggunakan perintah berikut
root@syslab:~# apt update
root@syslab:~# apt autoremove -y
root@syslab:~# apt install -y nginx
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
nginx
0 upgraded, 1 newly installed, 0 to remove and 86 not upgraded.
Need to get 1142 kB of archives.
After this operation, 3697 kB of additional disk space will be used.
Get:1 http://nginx.org/packages/ubuntu jammy/nginx amd64 nginx amd64 1.26.2-1~jammy [1142 kB]
Fetched 1142 kB in 1s (858 kB/s)
Selecting previously unselected package nginx.
(Reading database ... 94657 files and directories currently installed.)
Preparing to unpack .../nginx_1.26.2-1~jammy_amd64.deb ...
Saat ini Anda sudah berhasil melakukan instalasi Nginx secara manual di Ubuntu 22.04 LTS. Catatan untuk konfigurasi selanjutnya kami akan menggunakan instalasi Nginx secara manual ini karena terdapat perbedaan direktori konfigurasi jika Anda melakukan instalasi Nginx secara default repository dengan secara manual di Ubuntu perbedaannya sebagai berikut:
Directory Default Install Nginx Secara Manual : /etc/nginx/conf.d
Directory Default Install Nginx Default Repository : /etc/nginx/sites-available/ dan /etc/nginx/sites-enabled/
Untuk melakaukan manajemen service Nginx di Ubuntu 22.04 LTS sangat mudah, Anda dapat menggunakan systemd untuk proses manajemen service Nginx seperti start, stop, reload dan cek status nginx contoh nya seperti berikut:
root@syslab:/etc/nginx/conf.d# systemctl start nginx
root@syslab:/etc/nginx/conf.d# systemctl stop nginx
root@syslab:/etc/nginx/conf.d# systemctl restart nginx
root@syslab:/etc/nginx/conf.d# systemctl status nginx
● nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-11-27 15:31:04 UTC; 7s ago
Docs: https://nginx.org/en/docs/
Process: 64270 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 64271 (nginx)
Tasks: 3 (limit: 1023)
Memory: 3.2M
CPU: 24ms
CGroup: /system.slice/nginx.service
├─64271 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
├─64272 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
└─64273 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
Nov 27 15:31:04 syslab.syslab.id systemd[1]: Starting nginx - high performance web server...
Nov 27 15:31:04 syslab.syslab.id systemd[1]: Started nginx - high performance web server.
root@syslab:/etc/nginx/conf.d#
Enable nginx juga bisa menggunakan systemd, dengan enable nginx maka nginx akan otomatis running jika server melakukan reboot
root@syslab:/etc/nginx/conf.d# systemctl enable nginx
Synchronizing state of nginx.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable nginx
root@syslab:/etc/nginx/conf.d#
Jika sudah melakukan instalasi nginx dan sudah dipastikan nginx running, Anda dapat melakukan verifikasi akses Nginx dari browser dengan cara akses IP Server Anda
Virtual Host (AKA Server Block) biasanya digunakan untuk melakukan hosting website di web server Nginx. Misalnya Anda mempunyai domain apriori.my.id dan subdomain sub.apriori.my.id maka Anda dapat menghost domain dan subdomain di web server Nginx dengan cara membuat Server Block Nginx.
Sebelum membuat Virtual Host, siapkan direktori untuk proyek web Anda. Secara default, direktori ini berada di /var/www/html/namadomain
. Berikut adalah langkah untuk membuat direktori dan file sederhana
root@syslab:~# mkdir -p /var/www/html/apriori.my.id
root@syslab:~# mkdir -p /var/www/html/apriori.my.id/public_html/
root@syslab:~# mkdir -p /var/www/html/apriori.my.id/sub.apriori.my.id
root@syslab:~# echo "Test Page Nginx Syslab.iD" >> /var/www/html/apriori.my.id/public_html/index.html
root@syslab:~#
Kemudian, berikan permission dan ownership untuk directory yang sudah kita buat dengan cara sebagai berikut:
root@syslab:~# chown -R www-data:www-data /var/www/html/apriori.my.id/public_html/
root@syslab:~# chmod -R 755 /var/www/html/apriori.my.id/public_html/
root@syslab:~#
Seperti yang disampaikan sebelumnya untuk membuat server block nginx Anda dapat membuat nya di directory /etc/nginx/conf.d/ dengan penamaan file contoh apriori.my.id.conf dan berikut sample konfigurasi server block nginx
root@syslab:~# cd /etc/nginx/conf.d/
root@syslab:/etc/nginx/conf.d# vim apriori.my.id.conf
Berikut sample konfigurasi nginx untuk host web html
server {
server_name apriori.my.id;
root /var/www/html/apriori.my.id/public_html;
index index.html index.htm;
access_log /var/log/nginx/apriori.my.id.access.log;
error_log /var/log/nginx/apriori.my.id.error.log;
location / {
try_files $uri $uri/ =404;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot|otf)$ {
expires 30d;
access_log off;
}
}
Jika sudah dilakukan konfigurasi Anda perlu test terlebih dahulu konfigurasi Nginx nya apakah sudah tidak ada error atau masih ada warning atau error pada konfigurasi dengan menggunakan perintah nginx -t hasilnya akan nampak seperti berikut
root@syslab:/etc/nginx/conf.d# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@syslab:/etc/nginx/conf.d#
Terlihat dari output diatas dimana syntax is OK dalam artinya konfigurasi sudah benar dan tidak ada error. Jika sudah selanjutnya Anda dapat restart terlebih dahulu service nginx
root@syslab:/etc/nginx/conf.d# systemctl restart nginx
root@syslab:/etc/nginx/conf.d# systemctl status nginx
Setelah konfigurasi selesai, verifikasi akses melalui browser. Ketikkan http://apriori.my.id
di browser seperti berikut
Atau Anda juga bisa menggunakan command curl seperti berikut
Nurs-MacBook-Air :: ~ curl -4 apriori.my.id 127 ↵
Test Page Nginx Syslab.iD
Nurs-MacBook-Air :: ~ »
Tahapan selanjutnya yaitu bagaimana cara konfigurasi SSL. Untuk SSL sendiri ada 2 pilihan bisa menggunakan yang gratis dengan cara memanfaatkan certbot atau Let’s Encrypt atau Anda bisa menggunakan SSL yang berbayar.
Pada contoh kali ini kami menggunakna SSL Let’s Encrypt yang sudah kami generate sebelumnya dan kami simpan SSL nya di directory /etc/nginx/ssl seperti berikut
root@syslab:~# mkdir -p /etc/nginx/ssl
root@syslab:~# ll /etc/nginx/ssl/
total 28
drwxr-xr-x 2 root root 4096 Nov 27 16:20 ./
drwxr-xr-x 4 root root 4096 Nov 27 16:19 ../
-rw-r--r-- 1 root root 692 Nov 27 16:20 README
-rw-r--r-- 1 root root 1793 Nov 27 16:20 cert.pem
-rw-r--r-- 1 root root 1801 Nov 27 16:20 chain.pem
-rw-r--r-- 1 root root 3594 Nov 27 16:20 fullchain.pem
-rw------- 1 root root 1708 Nov 27 16:20 privkey.pem
root@syslab:~#
Buka kembali konfigurasi server block nginx domain apriori.my.id.conf dah tambahkan konfigurasi SSL seperti berikut
server {
server_name apriori.my.id;
root /var/www/html/apriori.my.id/public_html/;
index index.html;
access_log /var/log/nginx/apriori.my.id.access.log;
error_log /var/log/nginx/apriori.my.id.error.log;
location / {
try_files $uri $uri/ /index.html?$args;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
}
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
}
server {
if ($host = apriori.my.id) {
return 301 https://$host$request_uri;
} # managed by Certbot
server_name apriori.my.id;
listen 80;
return 404;
}
Verifikasi config nginx dan restart nginx
root@syslab:/etc/nginx/conf.d# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@syslab:/etc/nginx/conf.d#
root@syslab:/etc/nginx/conf.d# systemctl restart nginx
root@syslab:/etc/nginx/conf.d# systemctl status nginx
● nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-11-27 16:27:37 UTC; 5s ago
Docs: https://nginx.org/en/docs/
Process: 64601 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 64602 (nginx)
Tasks: 3 (limit: 1023)
Memory: 3.4M
CPU: 15ms
CGroup: /system.slice/nginx.service
├─64602 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
├─64603 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
└─64604 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
Nov 27 16:27:37 syslab.syslab.id systemd[1]: Starting nginx - high performance web server...
Nov 27 16:27:37 syslab.syslab.id systemd[1]: Started nginx - high performance web server.
root@syslab:/etc/nginx/conf.d#
Jika sudah melakukan pemasangan SSL seperti diatas, Anda dapat verifikasi akses kembali melalui web browser seperti gambar dibawah ini
Sampai tahap ini Anda sudah berhasil melakukan instalasi nginx di Ubuntu 22.04 LTS
Selamat mencoba 🔥