Artikel ini membahas pengaturan utama untuk mengoptimalkan performa web server nginx, termasuk kompresi gzip, pengaturan proxy_buffer, dan konfigurasi worker serta keep-alive.
Artikel ini menekankan pentingnya kompresi gzip dan buffering proxy_buffer untuk mengurangi jumlah data yang ditransfer dan meminimalkan beban server, serta pengaturan proses worker dan keep-alive untuk manajemen koneksi.
Artikel ini menyajikan berbagai pengujian untuk menerapkan pengaturan optimal sesuai lingkungan server dan memberikan perhatian terhadap pengoperasian server yang stabil.
Nginx adalah perangkat lunak sumber terbuka yang sering digunakan sebagai web server atau web proxy server.
Dengan konfigurasi yang tepat, Nginx dapat memberikan konten statis secara efisien.
Saya ingin mencatat beberapa konfigurasi penting di sini.
Beberapa Konfigurasi Penting Terkait Kinerja
1. Kompresi gzip
Saat memuat situs web, kita menerima banyak file dari web server, seperti JavaScript, gambar, HTML, dan CSS.
Alih-alih mengirimkan konten ini dalam bentuk aslinya, kita dapat menggunakan kompresi gzip untuk secara signifikan mengurangi jumlah data yang ditransmisikan.
Dengan kata lain, penerapannya akan menghasilkan:
- Pengurangan jumlah data, sehingga menghemat bandwidth.
- Penghematan sumber daya server.
- Peningkatan kecepatan pemuatan bagi pengguna.
Di sisi lain, karena server harus menjalankan kompresi gzip sebelum mengirimkan respons, penggunaan CPU server dapat meningkat.
Jenis file apa yang akan dikompresi, tingkat kompresi, dan ukuran file yang akan dikompresi perlu diuji sebelum diterapkan di lingkungan produksi.
Berikut adalah beberapa konfigurasi terkait gzip.
gzip on; # Mengaktifkan kompresi gzip.
gzip_vary on; # Menambahkan Vary: Accept-Encoding ke header.
gzip_proxied any; # Jika nginx digunakan sebagai proxy server, maka akan mengkompresi respons yang diterima dari backend. (Kompresi untuk permintaan yang di-proxy)
gzip_min_length 256; # Hanya mengkompresi file dengan ukuran 256 byte atau lebih besar
gzip_comp_level 5; # Mengatur tingkat kompresi dari 1 hingga 9. Semakin tinggi, semakin tinggi penggunaan CPU. 5 memberikan kompresi sekitar 50%.
gzip_types text/plain text/css text/xml application/json application/javascript;
// Mengatur tipe konten yang akan dikompresi.
* gzip_vary menginstruksikan server untuk mengirim konten yang dikompresi dan tidak dikompresi, tergantung pada apakah klien mendukung gzip atau tidak. (Memberitahu bahwa konten versi berbeda dapat dikirimkan bergantung pada header permintaan klien (Accept-Encoding)).
2. Pengaturan proxy_buffer
Nginx menyimpan respons dalam buffer sebelum mengirimkannya ke klien.
Ketika web server mengirim respons ke klien, jika kecepatan klien lambat, server harus terus menunggu untuk mengirimkan data. (Kemacetan jaringan)
Karena server terus menggunakan sumber daya, untuk mengatasi hal ini, buffer digunakan untuk memproses respons sementara terlepas dari kecepatan pemrosesan klien. Ini menghasilkan keuntungan sebagai berikut:
- Optimalisasi beban server
- Pengurangan kemacetan jaringan
location / {
proxy_pass url_server;
# Pengaturan proxy buffer
proxy_buffering on; # Mengaktifkan buffer.proxy_buffer_size 4k; # Mengatur ukuran buffer.(Terutama untuk header).proxy_buffers8 4k; # Jumlah dan ukuran buffer untuk setiap koneksi(8 buffer berukuran 4kb) proxy_busy_buffers_size 8k; # Ukuran buffer maksimum yang dapat digunakan saat mengirim respons ke klien
}
※ Ukuran buffer yang terlalu besar dapat menyebabkan penundaan dalam pengiriman data real-time seperti text streaming, sehingga pengujian sangat diperlukan. Terutama dengan banyaknya layanan terkait AI baru-baru ini, jika text streaming tidak berfungsi, periksa pengaturan ini.
3. Pengaturan worker dan http
Worker adalah proses yang menangani permintaan klien, dan kita dapat mengatur berapa banyak worker yang akan digunakan untuk setiap inti CPU server.
HTTP biasanya memiliki pola permintaan - koneksi - respons - penutupan koneksi, tetapi untuk mengurangi sumber daya yang digunakan untuk banyak permintaan, koneksi klien dapat dipertahankan. Ini adalah pengaturan keep alive.
worker_processes auto; # Pengaturan otomatis berdasarkan jumlah inti CPU yang tersedia
worker_connections 1024; # Jumlah koneksi yang dapat ditangani oleh setiap worker secara bersamaan
# Pengaturan keep-alive
keepalive_timeout 65;
keepalive_requests 100;
server {
listen 80;
location / {
proxy_pass url_server;
}
}
Alasan kedua hal ini dikelompokkan adalah sebagai berikut.
Jika server yang digunakan memiliki 4 inti, jumlah koneksi yang secara teoritis mungkin adalah 1.024 * 4 = 4.096.
(Mungkin tidak akurat tergantung pada sumber daya atau lingkungan lalu lintas)
Ketika 4.096 klien terhubung secara bersamaan dan menggunakan semua keepalive selama 65 detik,
Pengguna ke-4.097 yang mencoba untuk terhubung tidak akan dapat terhubung, yang dapat menyebabkan penundaan respons.
Oleh karena itu, dengan asumsi sumber daya server stabil karena auto scaling, jika terjadi penundaan respons selama peristiwa, pengaturan di atas dapat memberikan pengaruh tidak langsung.
4. Lainnya - blok location
Beberapa pengaturan seperti proxy buffer dapat diterapkan ke setiap URL permintaan.
* Beberapa pengaturan seperti keep-alive diterapkan pada tingkat HTTP/Server dan tidak dapat dikonfigurasi per blok.
Pengaturan di atas dapat digunakan untuk mengoptimalkan kinerja web. Setelah melakukan pengujian yang cukup dengan berbagai kasus uji, optimalkan kinerja server!
* Pengaturan nginx yang telah diubah dapat diterapkan tanpa waktu henti server, sehingga umumnya stabil.