Optimasi Nginx Pada Webserver

Nginx sering digunakan karena kinerjanya dibandingkan dengan beberapa pesaingnya. Meski begitu, sebagai pengguna Nginx, aku merasa nginx yang aku gunakan saat ini masih perlu untuk di-optimasi.

Apalagi sebagai pengguna vps dengan spesifikasi yang relatif kecil, optimasi merupakan sebuah hal yang harus untuk dilakukan.

Berikut adalah beberapa opsi yang perlu dioptimasi sebagai pengguna Nginx :

Optimasi Dasar

Beberapa hal dasar yang bisa dilakukan adalah menyesuaikan beberapa nilai pada berkas nginx.conf. Berikut ini beberapa nilai yang harus diperhatikan.

Worker Processes

Angka pada worker processes dihitung dari jumlah core CPU yang digunakan. Pada instance yang saya gunakan, jumlah core prosesornya 1, maka nilai dari worker processes ini adalah 1.

Arti dari worker processes adalah Nginx akan menyerahkan 1 proses worker ke 1 CPU.

Nilai auto juga bisa dipakai agar Nginx secara otomatis menyesuaikan jumlah worker sesuai dengan jumlah CPU.

worker_processes 1;
# worker_processes auto; # Gunakan auto untuk nilai yang aman

Untuk mengetahui jumlah core CPU yang digunakan, bisa menggunakan perintah grep ^processor /proc/cpuinfo | wc -l dari console.

Worker Connections

Nilai worker connections merupakan jumlah koneksi maksimal yang bisa diproses dalam satu waktu oleh masing-masing proses worker. Secara default, nilai worker connections adalah 512, namun di beberapa sistem, angka ini bisa diset lebih tinggi.

Untuk mengetahui batas maksimal yang bisa ditangani oleh sistem, gunakan perintah ulimit -n. Pada instance yang digunakan, nilainya adalah 1024. Masukkan angka ini pada bagian worker connections.

Untuk menangani jumlah koneksi yang besar secara optimal, gunakan epoll, sebuah sistem notifikasi event yang mengatur penggunaan I/O (input/output).

Supaya worker bisa menerima semua koneksi pada saat yang bersamaan, aktifkan multi accept pada konfigurasi.

events {
    worker_connections  1024;
    use epoll;
    multi_accept on;
}

HTTP dan TCP

Bagian ini mengatur bagaimana sebuah koneksi HTTP dilakukan. Keep alive timeout mengatur jangka waktu sebuah koneksi dipertahankan, sedangkan keep alive requests mengatur jumlah request yang akan dipertahankan.

Untuk melayani berkas statis seperti gambar, berkas CSS, dan berkas JS dengan optimal, send file wajib dinyalakan.

TCP no delay mengizinkan Nginx mengirimkan paket TCP secara bersama-sama dalam paket-paket kecil. TCP no push mengoptimalkan jumlah data yang dikirim melalui TCP.

http {
    keepalive_timeout   65;
    keepalive_requests  1000;
    sendfile    on;
    tcp_nopush  on;
    tcp_nodelay on;
}

Ukuran Buffers dan Timeouts

Jika ukuran buffer terlalu kecil, maka Nginx akan membuat sebuah berkas sementara, yang akan mempengaruhi performa karena melibatkan I/O media penyimpan (hard disk atau SSD).

Client body buffer size menangani ukuran buffer sebuah klien. Buffer ini sebagian besar berasal dari variabel POST. Ukuran buffer sebesar 128k sudah cukup.

Client max body size menentukan besar maksimal buffer, biasanya digunakan saat mengunggah berkas. Jika sebuah request ukurannya lebih besar dari nilai ini, pesan kesalahan HTTP 413 (request entity too large) akan dikirimkan. Jika nilai ini diset ke 0 maka Nginx tidak akan melakukan pemeriksaan terhadap ukuran request. Jika menggunakan PHP, pastikan angka ini sama dengan nilai upload max filesize di php.ini

Client header buffer size menentukan ukuran header buffer. Ukuran yang cukup adalah 1k. Large client header buffers menentukan jumlah dan ukuran maksimal sebuah header dari klien yang besar. Jumlah 4 header dengan 4k buffer sudah cukup.

Output buffers menentukan jumlah dan ukuran sebuah buffer yang digunakan untuk membaca respon dari disk. Jika memungkinkan, pengiriman data akan ditunda sampai Nginx mendapat jumlah data tertentu.

Client body timeout menentukan waktu tunggu sebelum Nginx mengirimkan hasil ke klien. Client header timeout menentukan waktu tunggu sebelum header respon dikirim ke klien. Jika tidak ada header atau body yang dikirim, Nginx akan mengirim pesan kesalahan HTTP 408 (request time out).

Send timeout menentukan waktu pengiriman respon ke klien. Jika klien tidak membaca data yang dikirimkan pada jangka waktu tertentu, Nginx akan memutuskan koneksi ke klien.

Untuk mengurangi kemungkinan gateway timed out, perpanjang waktu tunggu proxy dan fast CGI yang dipakai.

http {
    client_body_buffer_size     128k;
    client_max_body_size        20m;
    client_header_buffer_size   1k;
    large_client_header_buffers 4 4k;
    output_buffers              1 32k;
    postpone_output             1460;
    client_header_timeout       60s;
    client_body_timeout         60s;
    send_timeout                60s;
}

server {
    location / {
        proxy_read_timeout 150;
    }

    location ~* .php$ {
        fastcgi_read_timeout 150;
    }
}

Kompresi Dengan Gzip

Berkas yang berupa teks, termasuk XML, JSON, CSS, dan JS, bisa dikompresi dengan gzip sehingga ukuran data yang dikirimkan menjadi lebih kecil. Peramban modern biasanya telah mendukung kompresi gzip ini.

http {
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 32k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}

Menggunakan Cache

Pada berkas statis seperti gambar, berkas CSS, dan berkas JS, gunakan cache agar berkas-berkas ini disimpan pada peramban dan menggunakannya jika halaman yang sama dibuka kembali.

Tidak seperti pada pengaturan di atas di mana pengaturan dilakukan di berkas nginx.conf pada blok event dan http, pengaturan cache ini diletakkan pada blok server pada berkas pengaturan virtual host.

Pengaturan cache dilakukan dengan melakukan pengesetan header pada berkas dengan ekstensi tertentu.

server {
    # Feed
    location ~* \.(?:rss|atom)$ {
        expires 1h;
        add_header Cache-Control "public";
    }
    
    # Media: images, icons, video, audio, HTC
    location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
        expires 1y;
        access_log off;
        add_header Cache-Control "public";
    }
    
    # CSS dan Javascript
    location ~* \.(?:css|js)$ {
        expires 1y;
        access_log off;
        add_header Cache-Control "public";
    }

    # Media: fonts
    location ~* \.(?:eot|ttf|woff|woff2)$ {
        expires 1y;
        access_log off;
        add_header Cache-Control "public";
    }
}

Selamat mencoba …

 

 

 

 

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp
Share on email
kamu tak pernah salah, begitupula aku, tapi aku tau siapa yang paling benar 😆
2 months ago
View on Instagram |
1/12
ada yang bisa diandalkan, tapi bukan kamu ...
2 months ago
View on Instagram |
2/12
waktu dibuatkan minuman pemusnah sakit tenggorokan dan batuk ini, pikiranku melayang ke awal Maret 2021, dimana aku dan keluarga di Jateng sempat terkena Long Covid kalau orang bilang, dan Ibu mengirimkan beberapa botol minuman racikan ini utk obat. tapi sungguh tdk disangka, setelah kami sembuh Ibu justru berpulang karena Covid di bulan Juli 2021. Allah lebih tau mana yang terbaik ...
1 year ago
View on Instagram |
3/12
setelah sekian purnama
2 years ago
View on Instagram |
4/12
halo selamat pagi, kita ketemu lagi
2 years ago
View on Instagram |
5/12
4 days New Workshop Grounded Total Marketing (GTM) Lead by Coach Dr. Fahmi Angkatan 2 Selasa - Jumat, 26 - 29 Oktober 2021 Alhamdulilah diberi kesempatan untuk mengikuti workshop GTM yang dibimbing langsung oleh ahlinya @coach.fahmi Insyaallah saya siap hadir dan siap menerima semua ilmu yang diberikan selama mengikuti kegiatan GTM. Mudah-mudahan dengan semua ilmu yang saya dapatkan nanti, dapat membantu saya untuk mengoptimalkan kinerja saya dalam perusahaan. Menuntut ilmu adalah sesuatu yang harus dilakukan apabila seseorang ingin terus berkembang dan bertumbuh, dan Insyaallah saya siap melakukannya. "Bila kau tak tahan lelahnya belajar, maka kau harus menahan perihnya kebodohan" Imam Asy Syafi'i #salamgrounded #groundedtotalmarketing #gtm #coachdrfahmi #menolakkalah #menolaklemah
3 years ago
View on Instagram |
6/12
seribu alasan kamu berharga
4 years ago
View on Instagram |
8/12
masih, rasa yang sama ... pahit dan asam
4 years ago
View on Instagram |
9/12
ball boy #bodiwebid #havingfun #ball #swim
5 years ago
View on Instagram |
10/12
ketika aku mengenalmu, dan kamu berlalu dalam bayang2 #bodiwebid #alunalunpurworejo
5 years ago
View on Instagram |
11/12

Artikel Menarik

Exit mobile version