KATEGORI: WEB SERVER LINUX
Memahami Struktur File dan Direktori Nginx Web Server
Membantu kalian untuk mendalami pelajaran terkait web server nginx, disertai dengan keterangan yang lengkap dan jelas.
Kalian sudah pernah mengonfigurasi web server berbasis nginx atau sama sekali belum pernah menyentuhnya? Tenang saja, artikel ini dikhususkan bagi orang-orang yang sedang berkecimpung dalam platform web server ini. Juga dalam blog kali ini tidak dibutuhkan server untuk praktikum, namun akan lebih mudah memahaminya jika kalian sambil memegang server nginx.
Struktur file dan direktori menjadi salah satu yang terpenting untuk kalian pahami sebelum menyelam lebih dalam. Setelah kalian paham maka akan lebih mudah dalam bereksperimen dengan platform web server nginx, yang sudah kita ketahui sangat banyak fitur yang dimiliki.
Keterangan:
- Warna hijau, mengidentifikasikan sebagai file.
- Warna hijau gelap, sebagai folder atau direktori.
Gambar diatas merupakan sedikit gambaran terkait struktur file dan direktori nginx, perhatikan keterangannya agar kalian dapat dengan mudah memahami blog ini.
1. /usr/sbin/nginx/ (Opsional)
Bagi kalian yang sedang memegang server dan sudah menginstall bisa ketik perintah nginx, itu berguna untuk memberikan perintah kepada web server. Dibalik perintah tersebut, ada file binary yang bersifat executable (dapat dieksekusi) sehingga kita dapat mengenal yang namanya baris perintah atau command line.
administrator@web-server:~# which nginx
/usr/sbin/nginx
Gunakan perintah which nginx untuk mengetahui letak sumber file binary dari perintah nginx, hasil outputnya akan berbeda-beda. Dalam contoh kali ini, outputnya yaitu /usr/sbin/nginx yang sudah kalian ketahui jenis file ini dari paragraf sebelumnya.
Selain itu kita juga bisa menggunakan perintahnya dengan langsung mengarah kepada file binary executable tersebut, dan juga tidak perlu heran lagi, karena memang sumbernya dari file itu sendiri.
administrator@web-server:~# /usr/sbin/nginx -h
nginx version: nginx/1.18.0
Pembahasan ini berlaku untuk beberapa perintah yang lainnya, jika kalian ingin mengetahui kegunaan perintah nginx bisa klik disini. Dokumentasi perintahnya ditulis dalam bahasa inggris, di lain waktu akan saya ulas secara khusus bila memungkinkan.
2. /etc/nginx/
Berlanjut pada sumber otak dari nginx sendiri, karena semua hal yang akan kita lakukan pada nginx terjadi pada direktori tersebut. Bisa dilihat dari beberapa tutorial berkaitan nginx, pasti dari semua kontennya mengandung /etc/nginx/.
Dalam beberapa kemungkinan yaitu hilangnya /etc/nginx, terkadang lokasinya tidak berada pada /etc/nginx/. Namun pada /usr/local/nginx/conf/nginx.conf dan /usr/local/etc/nginx/nginx.conf, maka jangan bingung lagi jika kalian tidak menemukan lokasi konfigurasi nginx default.
3. /etc/nginx/nginx.conf
Sebelum ada konfigurasi kustom, pasti ada konfigurasi utama yang mengakuisisinya. Benar! /etc/nginx/nginx.conf adalah konfigurasi paling utama dan sangat penting, saking pentingnya kita tidak boleh mengedit file ini secara sembarangan. Lebih baik menambahkan konfigurasi tambahan kedalam /etc/nginx/conf.d yang akan kita bahas selanjutnya.
Keterangan:
- user = Menentukan user yang akan memproses dan memberikan respon semua permintaan HTTP dari klien, dalam contoh ini adalah nginx. Maka ketika nginx akan berurusan dengan file dan direktori dalam server, lebih baik memberikan kepemilikan file kepada user nginx, bisa menggunakan perintah chown nginx:nginx atau chmod 777 untuk membuat direktori tersebut dapat diakses oleh semua user.
- worker_processes = Ini rumit untuk dijelaskan, namun baris ini berguna untuk menentukan jumlah pekerja yang akan bekerja untuk nginx, biasanya ditentukan berdasarkan core CPU. Kalian juga bisa lihat proses pekerja dengan menggunakan perintah ps aux | grep ‘nginx’.
- error_log = Menyimpan histori yang berkaitan dengan error, kalian juga harus menentukan letak file yang akan menyimpan histori tersebut. Ada 8 level tingkatan histori error, yaitu debug, info, notice, warn, error, crit, alert, emerg. Dalam contoh ini kita menggunakan notice, berarti menyimpan histori error yang normal/sering ditemukan sampai level emerg, lengkapnya klik disini.
- pid = Menentukan file yang menyimpan process ID dari nginx, dalam contoh ini letaknya di /var/run/nginx.pid. Kalian bisa cek isi file tersebut lalu terdapat ID nya, selanjutnya kita bisa cek lagi dengan menggunakan perintah ps -p <number_id>.
- worker_connection = Menentukan jumlah maksimal sesi koneksi bersamaan dengan nginx.
- include = Mengikutsertakan file lain yang terdiri dari struktur blok yang benar, sesuai dengan aturan sintaksis nginx.
- default_type = Ini juga rumit untuk dijelaskan, namun baris ini berguna untuk menentukan content-type yang secara default digunakan. Dalam contoh ini, application/octet-stream yang berarti akan membiarkan klien mendownload file dari server secara otomatis, apabila file yang dibuka tidak mengandung ekstensi file yang jelas. Maka dari itu pentingnya memberikan ekstensi file yang jelas.
- log_format = Kustomisasi logger agar menyimpan histori yang kita butuhkan.
- access_log = Menyimpan histori permintaan HTTP dari klien, kita juga harus menambahkan letak file yang menyimpan histori tersebut. Lalu ada parameter terakhir yang digunakan untuk menentukan cara membuat histori loggernya, dalam contoh ini adalah main. Berarti kita menggunakan logger dengan format dari poin sebelumnya yaitu log_format main.
- keepalive_timeout = Menentukan maksimal waktu yang akan browser klien tunggu untuk mendapatkan respon dari server.
- gzip = Ini berguna untuk memperkecil ukuran file diantaranya yaitu xml, javascript, css, dan html. Lebih lengkapnya klik disini.
4. /etc/nginx/conf.d/
Sebelum kalian lanjut ke poin selanjutnya, perlu diketahui dahulu kegunaan direktori ini. Semua konfigurasi tambahan milik kita akan disimpan disini, bisa kalian lihat juga isi konfigurasi /etc/nginx/nginx.conf, akhir barisnya terdapat include /etc/nginx/conf.d/*.conf yang berarti mengikutsertakan semua file berekstensi .conf kedalam konfigurasi nginx.
5. /etc/nginx/conf.d/default.conf
Sejak nginx terinstall, kalian sudah dapat langsung mengakses situs web server pada browser klien tanpa perlu mengonfigurasinya. Ini karena terdapat file default.conf dalam direktori conf.d, seperti yang dijelaskan pada poin nomor 4 sebelumnya.
Penulisan dalam nginx.conf (Konfigurasi utama) jika dikonversi kedalam konteks nginx akan menjadi seperti dibawah ini;
Namun semua konfigurasi tambahan yang kita simpan di conf.d sangat berbeda dengan poin nomor 3, bisa kalian lihat juga saat baris pertama kita langsung menulis server { tanpa http {.
Keterangan:
- { dan } = Menentukan awalan dan akhiran dari beberapa blok program, biasanya yang menggunakan ini adalah server, http, location, upstream dan masih ada lainnya. Dengan adanya ini, maka nginx dapat mengenali awal dan akhir dari konfigurasi.
- # = Berguna untuk mengomentari salah satu baris ataupun beberapa baris, terlihat di gambar ada begitu banyak baris yang diawali dengan #(pagar). Komentar memiliki 2 kondisi kegunaan, yaitu membuat baris perintah yang bisa dipakai menjadi tidak bisa, kedua yaitu mendokumentasikan agar orang lain yang membukanya bisa paham dengan apa yang ada didalam konfigurasi tersebut.
- listen = Menentukan port yang akan mendengarkan permintaan HTTP dari klien, dalam contoh ini adalah port 80. Ada 3 format penggunaannya, yaitu menggunakan soket, ip address:port, dan port saja. Pada gambar diatas kita menggunakan port saja yang berarti mendengarkan di 0.0.0.0:80 atau semua interface.
- server_name = Menentukan domain yang akan mendengarkan permintaan HTTP dari klien. Dalam contoh ini adalah localhost, jika kalian sudah mengonfigurasi DNS server maka domainnya juga bisa ditambahkan. Contoh server_name medium.com atau bisa juga subdomain server_name external.medium.com.
- index = Menentukan file yang akan otomatis terbuka saat ada permintaan HTTP dari klien, dalam contoh ini filenya yaitu index.html dan index.htm.
- root = Menentukan direktori yang akan melakukan respon dari permintaan HTTP klien. Dalam contoh ini letaknya di /usr/share/nginx/html, jika kita lihat isi file didalam direktori tersebut terdapat index.html. Maka seperti yang dijelaskan pada poin sebelumnya mengenai index, yang akan merespon permintaan HTTP adalah file index.html.
- proxy_pass = Melibatkan server lain untuk memproses permintaan HTTP dari klien, bisa digunakan untuk kebutuhan logging, mendistribusikan beban kerja dan sebagainya. Bisa klik disini jika kalian berkenan mempraktikannya.
- location / = Membuat kondisi berdasarkan path situs website, dalam contoh ini hanya / yang berarti dibuat untuk semua lokasi path. Jika diganti ke location /article, berarti kita membuat kondisi yang dikhususkan untuk lokasi /article saja.
- location ~ \.php$ = Pada poin sebelumnya sudah dijelaskan, namun ini lebih kompleks lagi. Kondisi ini ditentukan untuk semua ekstensi berkaitan php, Jadi ketika ada permintaan ke lokasi *.php maka blok ini akan memprosesnya.
- fastcgi_pass = Melemparkan paket permintaan HTTP, dalam contoh ini ke 127.0.0.1:9000. Karena nginx tidak dapat memproses script PHP, maka kita membutuhkan layanan php-fpm untuk memprosesnya. Port 9000 adalah default port layanan php-fpm.
- fastcgi_param = Digunakan untuk menentukan lokasi file yang akan diproses oleh server fastcgi, dalam contoh ini digunakan untuk memproses lokasi script file PHP.
- deny = Aturan yang dibuat untuk memblokir permintaan dari IP atau range IP yang ditentukan.
6. /etc/nginx/fastcgi_params
File ini akan membantu kita mengelola permintaan HTTP dari klien, dengan begitu semua permintaan tidak akan dibebankan hanya pada web server.
Sebelum kita menggunakan baris sintaks fastcgi lainnya, pastikan kita sudah menambahkan include fastcgi_params. Bila tidak ditambahkan maka baris fastcgi lainnya akan sia-sia saja. Contoh saat kita membutuhkan php-fpm untuk memproses script PHP, jika tidak terdapat include fastcgi_params maka saat situs web server dibuka dalam browser akan merespon tampilan putih saja atau kosong.
7. /etc/nginx/mime.types
Menyimpan header content-type yang cocok untuk beberapa ekstensi file pada umumnya, silahkan lihat sendiri ke dalam file tersebut.
8. /etc/nginx/uwsgi_params
Saya rasa ini sama dengan fastcgi_params, namun yang membedakan adalah script yang akan diproses olehnya.
Script yang akan diprosesnya adalah framework website berbasis python, berdasarkan informasi dari PEP-333 uWSGI(Web Server Gateway Interface) merupakan penghubung koneksi antara server yang sudah ada dengan framework python.
9. /etc/nginx/modules
Ada 2 tipe nginx yaitu nginx+ dan nginx oss, karena tipe nginx yang kita gunakan sekarang adalah gratisan atau open source, maka nggk akan bisa belajar cara mempraktikannya langsung.
Jadi hanya sekedar pengetahuan, modules ini memungkinkan kita untuk menggunakan beberapa fitur tambahan diantaranya yaitu WAF, GeoIP, Editor gambar dan sebagainya. Lebih lengkap untuk mengetahui perbedaan mendasarnya klik disini.
Parameter Tambahan
Sekarang, saya membutuhkan pertolongan kalian! Berikut adalah beberapa parameter file bawaan yang belum saya mengerti, dan saya harap kita dapat belajar bersama.
- koi-utf
- koi-win
- win-utf
- scgi_params
Sebagai penutup, tulisan ini memang sangat panjang sekali dan tidak memungkinkan untuk memahami semuanya secara langsung. Kalian bisa gunakan artikel ini sebagai hand-ebook untuk kedepannya saat terjadi hambatan saat belajar nginx web server.
Learn then Share.