Mengkonfigurasi Nginx untuk Performa dan Keamanan

Dalam tutorial ini, kita akan melihat bagaimana kita dapat mengkonfigurasi server web Nginx untuk lingkungan produksi.


Server web dalam lingkungan produksi berbeda dari server web dalam lingkungan pengujian dalam hal kinerja, keamanan, dan sebagainya.

Secara default, selalu ada pengaturan konfigurasi siap pakai untuk server web Nginx setelah Anda berhasil menginstalnya. Namun, konfigurasi default tidak cukup baik untuk lingkungan produksi. Oleh karena itu kami akan fokus pada cara mengonfigurasi Nginx agar berkinerja lebih baik selama lonjakan lalu lintas padat dan normal, dan bagaimana cara mengamankannya dari pengguna yang berniat menyalahgunakannya.

Jika Anda belum menginstal Nginx pada mesin Anda, Anda dapat memeriksa caranya di sini. Ini menunjukkan kepada Anda cara menginstal Nginx pada platform Unix. Pilih untuk menginstal Nginx melalui file sumber karena Nginx pre-built tidak datang dengan beberapa modul yang digunakan dalam tutorial ini.

Persyaratan

Anda perlu menginstal yang berikut ini di mesin Anda dan pastikan Anda menjalankan tutorial ini pada platform berbasis Debian seperti Ubuntu.

  • Ubuntu atau platform berbasis Debian lainnya
  • wget
  • Vim (editor teks)

Selain itu, Anda perlu menjalankan atau menjalankan beberapa perintah dalam tutorial ini sebagai pengguna root melalui perintah sudo.

Memahami Struktur Konfigurasi Nginx

Pada bagian ini kita akan melihat hal-hal berikut:

  • Struktur Nginx
  • Bagian seperti acara, HTTP, dan surat
  • Sintaks yang valid dari Nginx

Pada akhir bagian ini, Anda akan memahami struktur konfigurasi Nginx, tujuan atau peran bagian serta cara menentukan arahan yang valid di dalam bagian.

File konfigurasi Nginx lengkap memiliki struktur logis yang terdiri dari arahan yang dikelompokkan ke dalam beberapa bagian seperti bagian acara, bagian http, bagian surat dan sebagainya..

File konfigurasi utama terletak di /etc/nginx/nginx.conf sementara file konfigurasi lainnya berada di / etc / nginx.

Konteks Utama

Bagian atau konteks ini mengandung arahan di luar bagian spesifik seperti bagian surat.

Arahan lain seperti nginx pengguna; , Pekerja_proses 1; , Error_log /var/log/nginx/error.log beri peringatan; dan pid /var/run/nginx.pid dapat ditempatkan di dalam bagian atau konteks utama.

Tetapi beberapa arahan ini seperti proses worker_ juga bisa ada di bagian acara.

Bagian

Bagian dalam Nginx mendefinisikan konfigurasi untuk modul Nginx.

Sebagai contoh, bagian http mendefinisikan konfigurasi untuk modul ngx_http_core, bagian acara mendefinisikan konfigurasi untuk ngx_event_module sementara bagian mail mendefinisikan konfigurasi untuk ngx_mail_module.

Anda bisa mengeceknya sini untuk daftar lengkap bagian di Nginx.

Arahan

Arahan dalam Nginx terdiri dari nama variabel dan sejumlah argumen seperti berikut:

Proses pekerja_ adalah nama variabel sementara otomatis berfungsi sebagai argumen.

pekerja_proses otomatis;

Arahan diakhiri dengan titik koma seperti yang ditunjukkan di atas.

Akhirnya, file konfigurasi Nginx harus mematuhi serangkaian aturan tertentu. Berikut ini adalah sintaks konfigurasi Nginx yang valid:

  • Arahan yang valid dimulai dengan nama variabel kemudian diikuti oleh satu atau lebih argumen
  • Semua arahan yang valid diakhiri dengan titik koma;
  • Bagian didefinisikan dengan kurung kurawal {}
  • Bagian dapat disematkan di bagian lain
  • Konfigurasi di luar bagian mana pun adalah bagian dari konfigurasi global Nginx.
  • Baris yang dimulai dengan tanda pagar # adalah komentar.

Tuning Nginx untuk Performa

Di bagian ini, kami akan mengonfigurasi Nginx agar berkinerja lebih baik selama lalu lintas padat dan lonjakan lalu lintas.

Kami akan melihat cara mengkonfigurasi:

  • Pekerja
  • Aktivitas I / O Disk
  • Aktivitas jaringan
  • Buffer
  • Kompresi
  • Caching
  • Waktu habis

Namun, di dalam lingkungan virtual yang diaktifkan, ketikkan perintah berikut untuk mengubah ke direktori Nginx dan daftar isinya.

cd nginx && ls

Cari folder conf. Di dalam folder ini adalah file nginx.conf.

Kami akan menggunakan file ini untuk mengkonfigurasi Nginx

Sekarang jalankan perintah berikut untuk menavigasi ke folder conf dan buka file nginx.conf dengan editor vim

cd conf
sudo vim nginx.conf

Di bawah ini adalah tangkapan layar bagaimana tampilan file nginx.conf secara default.

Pekerja

Untuk mengaktifkan Nginx agar berkinerja lebih baik, kita perlu mengonfigurasi pekerja di bagian acara. Mengkonfigurasi pekerja Nginx memungkinkan Anda untuk memproses koneksi dari klien secara efektif.

Dengan anggapan Anda belum menutup editor vim, tekan tombol i pada keyboard untuk mengedit file nginx.conf.

Salin dan tempel berikut ini di dalam bagian acara seperti yang ditunjukkan di bawah ini:

acara {
pekerja_proses otomatis;
koneksi pekerja_1024;
worker_rlimit_nofile 20960;
multi_menerima pada;
mutex_accept on;
mutex_accept_delay 500 ms;
gunakan epoll;
epoll_events 512;
}

proses pekerja_: Arahan ini mengontrol jumlah pekerja di Nginx. Nilai direktif ini diatur ke otomatis untuk memungkinkan Nginx menentukan jumlah core yang tersedia, disk, beban server, dan subsistem jaringan. Namun, Anda dapat menemukan jumlah core dengan mengeksekusi perintah lscpu pada terminal.

worker_connections: Arahan ini menetapkan nilai dari jumlah koneksi simultan yang dapat dibuka oleh seorang pekerja. Nilai default adalah 512 tetapi kami mengaturnya ke 1.024 untuk memungkinkan satu pekerja menerima koneksi yang simultan dari klien.

worker_rlimit_nofile: Arahan ini entah bagaimana terkait dengan worker_connections. Untuk menangani koneksi simultan yang besar, kami mengaturnya ke nilai yang besar.

multi_accept: Arahan ini memungkinkan pekerja untuk menerima banyak koneksi dalam antrian sekaligus. Antrian dalam konteks ini hanya berarti urutan objek data yang menunggu untuk diproses.

mutex_accept: Arahan ini dimatikan secara default. Tetapi karena kami telah mengkonfigurasi banyak pekerja di Nginx, kami perlu mengaktifkannya seperti yang ditunjukkan pada kode di atas untuk memungkinkan pekerja menerima koneksi baru satu per satu.

mutex_accept_delay: Arahan ini menentukan berapa lama seorang pekerja harus menunggu sebelum menerima koneksi baru. Setelah accept_mutex dihidupkan, kunci mutex diberikan kepada pekerja untuk jangka waktu yang ditentukan oleh accept_mutex_delay. Ketika jangka waktu habis, pekerja berikutnya dalam antrean siap menerima koneksi baru.

gunakan: Arahan ini menentukan metode untuk memproses koneksi dari klien. Dalam tutorial ini, kami memutuskan untuk menetapkan nilai menjadi epoll karena kami bekerja pada platform Ubuntu. Metode epoll adalah metode pemrosesan yang paling efektif untuk platform Linux.

epoll_events: Nilai dari direktif ini menentukan jumlah kejadian yang akan ditransfer Nginx ke kernel.

Disk I / O

Di bagian ini, kami akan mengonfigurasi aktivitas I / O asinkron di Nginx untuk memungkinkannya melakukan transfer data yang efektif dan meningkatkan efektivitas cache.

Disk I / O hanya merujuk pada operasi tulis dan baca antara hard disk dan RAM. Kami akan memanfaatkan sendfile () berfungsi di dalam kernel untuk mengirim file kecil.

Anda dapat menggunakan bagian http, bagian lokasi dan bagian server untuk arahan di area ini.

Bagian lokasi, bagian server dapat disematkan atau ditempatkan di dalam bagian http untuk membuat konfigurasi dapat dibaca.

Salin dan tempel kode berikut di dalam bagian lokasi yang tertanam di dalam bagian HTTP.

lokasi / pdf / {
sendfile aktif;
aio on;
}

lokasi / audio / {
directio 4m
directio_alignment 512
}

sendfile: Untuk memanfaatkan sumber daya sistem operasi, setel nilai arahan ini ke on. sendfile mentransfer data antara deskriptor file di dalam ruang kernel OS tanpa mengirimnya ke buffer aplikasi. Arahan ini akan digunakan untuk melayani file kecil.

directio: Arahan ini meningkatkan efektivitas cache dengan memungkinkan membaca dan menulis dikirim langsung ke aplikasi. directio adalah fitur sistem file dari setiap sistem operasi modern. Arahan ini akan digunakan untuk melayani file yang lebih besar seperti video.

aio: Arahan ini memungkinkan multi-threading ketika disetel ke on untuk operasi tulis dan baca. Multi-threading adalah model eksekusi yang memungkinkan beberapa utas untuk mengeksekusi secara terpisah satu sama lain sementara berbagi sumber daya proses hosting mereka.

directio_alignment: Arahan ini memberikan nilai ukuran blok untuk transfer data. Ini terkait dengan arahan directio.

Lapisan jaringan

Pada bagian ini, kami akan menggunakan arahan seperti tcp_nodelay dan tcp_nopush untuk mencegah paket kecil menunggu jangka waktu tertentu sekitar 200 milidetik sebelum dikirim sekaligus.

Biasanya ketika paket ditransfer dalam ‘potongan’, mereka cenderung menjenuhkan jaringan yang sangat dimuat. Jadi John Nagle membangun sebuah algoritma penyangga untuk mengatasi masalah ini. Tujuan dari algoritma buffering Nagle adalah untuk mencegah paket kecil dari jenuh jaringan yang sangat dimuat.

Salin dan tempel kode berikut di dalam bagian HTTP.

http {

tcp_nopush aktif;
tcp_nodelay aktif;

}

tcp_nodelay: Arahan ini, secara default, dinonaktifkan untuk memungkinkan paket kecil menunggu periode tertentu sebelum dikirim sekaligus. Untuk memungkinkan semua data dikirim sekaligus, arahan ini diaktifkan.

tcp_nopush: Karena kami telah mengaktifkan direktif tcp_nodelay, paket kecil dikirim sekaligus. Namun, jika Anda masih ingin menggunakan algoritma buffering John Nagle, kami juga dapat mengaktifkan tcp_nopush untuk menambahkan paket satu sama lain dan mengirim semuanya sekaligus.

Buffer

Mari kita lihat cara mengkonfigurasi buffer permintaan di Nginx untuk menangani permintaan secara efektif. Buffer adalah penyimpanan sementara tempat data disimpan selama beberapa waktu dan diproses.

Anda dapat menyalin di bawah ini di bagian server.

server {

client_body_buffer_size 8k;
client_max_body_size 2m;
client_body_in_single_buffer aktif;
client_body_temp_pathtemp_files 1 2;
client_header_buffer_size 1m;
large_client_header_buffers 4 8k;

}

Penting untuk memahami apa yang dilakukan garis penyangga tersebut.

client_body_buffer_size: Arahan ini menetapkan ukuran buffer untuk badan permintaan. Jika Anda berencana untuk menjalankan server web pada sistem 64-bit, Anda perlu mengatur nilainya menjadi 16k. Jika Anda ingin menjalankan server web pada sistem 32-bit, atur nilainya menjadi 8k.

client_max_body_size: Jika Anda bermaksud menangani unggahan file besar, Anda perlu mengatur arahan ini setidaknya 2m atau lebih. Secara default, ini diatur ke 1m.

client_body_in_file_only: Jika Anda telah menonaktifkan direktif client_body_buffer_size dengan simbol hashtag # dan direktif ini client_body_in_file_only diatur, Nginx kemudian akan menyimpan buffer permintaan ke file sementara. Ini tidak direkomendasikan untuk lingkungan produksi.

client_body_in_single_buffer: Terkadang tidak semua badan permintaan disimpan dalam buffer. Sisanya disimpan atau ditulis ke file sementara. Namun, jika Anda bermaksud menyimpan atau menyimpan buffer permintaan lengkap dalam satu buffer, Anda perlu mengaktifkan arahan ini.

client_header_buffer_size: Anda dapat menggunakan arahan ini untuk mengatur atau mengalokasikan buffer untuk header permintaan. Anda dapat mengatur nilai ini ke 1m.

large_client_header_buffers: Arahan ini digunakan untuk mengatur jumlah dan ukuran maksimum untuk membaca header permintaan besar. Anda dapat mengatur jumlah maksimum dan ukuran buffer ke 4 dan 8k secara tepat.

Kompresi

Mengompresi jumlah data yang ditransfer melalui jaringan adalah cara lain untuk memastikan bahwa server web Anda berkinerja lebih baik. Di bagian ini, kita akan menggunakan arahan seperti gzip, gzip_comp_level, dan gzip_min_length untuk memampatkan data.

Rekatkan kode berikut di dalam bagian http seperti yang ditunjukkan di bawah ini:

http {

gzip aktif;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_types text / xml text / css;
gzip_http_version 1.1;
gzip_vary aktif;
gzip_disable "MSIE [4-6] \.";

}

gzip: Jika Anda ingin mengaktifkan kompresi, atur nilai direktif ini ke aktif. Secara default, ini dinonaktifkan.

gzip_comp_level: Anda dapat menggunakan arahan ini untuk mengatur tingkat kompresi. Agar tidak membuang sumber daya CPU, Anda tidak perlu mengatur level kompresi terlalu tinggi. Antara 1 dan 9, Anda dapat mengatur level kompresi ke 2 atau 3.

gzip_min_length: Tetapkan panjang respons minimum untuk kompresi melalui bidang header respons panjang konten. Anda dapat mengaturnya hingga lebih dari 20 byte.

gzip_types: Arahan ini memungkinkan Anda memilih jenis respons yang ingin Anda kompres. Secara default, tipe respons teks / html selalu dikompresi. Anda dapat menambahkan jenis respons lain seperti teks / css seperti yang ditunjukkan pada kode di atas.

gzip_http_version: Arahan ini memungkinkan Anda untuk memilih versi HTTP minimum dari permintaan untuk tanggapan terkompresi. Anda dapat menggunakan nilai default yaitu 1.1.

gzip_vary: Ketika arahan gzip diaktifkan, arahan ini menambahkan bidang header Vary: Terima Encoding ke respons.

gzip_disabled: Beberapa browser seperti Internet Explorer 6 tidak memiliki dukungan untuk kompresi gzip. Arahan ini memanfaatkan bidang header permintaan Agen Pengguna untuk menonaktifkan kompresi untuk browser tertentu.

Caching

Leverage fitur caching untuk mengurangi berapa kali memuat data yang sama beberapa kali. Nginx menyediakan fitur untuk menyimpan metadata konten statis melalui arahan open_file_cache.

Anda dapat menempatkan arahan ini di dalam bagian server, lokasi dan http.

http {

open_file_cache maks = 1.000 tidak aktif = 30-an;
open_file_cache_valid 30s;
open_file_cache_min_uses 4;
open_file_cache_errors aktif;

}

open_file_cache: Arahan ini dinonaktifkan secara default. Aktifkan itu jika Anda ingin menerapkan caching di Nginx. Arahan ini menyimpan metadata file dan direktori yang biasa diminta oleh pengguna.

open_file_cache_valid: Arahan ini berisi informasi cadangan di dalam arahan open_file_cache. Anda dapat menggunakan arahan ini untuk menetapkan periode yang valid biasanya dalam detik setelah informasi yang terkait dengan file dan direktori divalidasi kembali.

open_file_cache_min_uses: Nginx biasanya menghapus informasi di dalam arahan open_file_cache setelah periode tidak aktif berdasarkan open_file_cache_min_uses. Anda dapat menggunakan arahan ini untuk menetapkan jumlah minimum akses untuk mengidentifikasi file dan direktori mana yang diakses secara aktif.

open_file_cache_errors: Anda dapat menggunakan arahan ini untuk memungkinkan Nginx melakukan cache kesalahan seperti “izin ditolak” atau “tidak dapat mengakses file ini” ketika file diakses. Jadi kapan pun sumber daya diakses oleh pengguna yang tidak memiliki hak untuk melakukannya, Nginx menampilkan laporan kesalahan yang sama “izin ditolak”.

Waktu habis

Konfigurasikan batas waktu menggunakan arahan seperti keepalive_timeout dan keepalive_requests untuk mencegah koneksi lama menunggu dari pemborosan sumber daya.

Di bagian HTTP, salin dan tempel kode berikut:

http {

keepalive_timeout 30s;
keepalive_requests 30;
send_timeout 30s;

}

keepalive_timeout: Pertahankan koneksi tetap hidup selama sekitar 30 detik. Standarnya adalah 75 detik.

keepalive_requests: Konfigurasikan sejumlah permintaan agar tetap hidup selama periode waktu tertentu. Anda dapat mengatur jumlah permintaan ke 20 atau 30.

keepalive_disable: jika Anda ingin menonaktifkan koneksi keepalive untuk grup browser tertentu, gunakan arahan ini.

send_timeout: Tetapkan batas waktu untuk mentransmisikan data ke klien.

Konfigurasi Keamanan untuk Nginx

Berikut ini hanya fokus pada cara mengkonfigurasi Nginx dengan aman alih-alih aplikasi web. Dengan demikian kita tidak akan melihat serangan berbasis web seperti injeksi SQL dan sebagainya.

Pada bagian ini kita akan melihat cara mengkonfigurasi yang berikut:

  • Batasi akses ke file dan direktori
  • Konfigurasikan log untuk memantau aktivitas berbahaya
  • Cegah DDoS
  • Nonaktifkan daftar direktori

Batasi akses ke file dan direktori

Mari kita lihat cara membatasi akses ke file dan direktori sensitif melalui metode berikut.

Dengan memanfaatkan Otentikasi HTTP

Kami dapat membatasi akses ke file atau area sensitif yang tidak dimaksudkan untuk dilihat publik dengan meminta otentikasi dari pengguna atau bahkan administrator. Jalankan perintah berikut untuk menginstal utilitas pembuatan file kata sandi jika Anda belum menginstalnya.

apt-get install -y apache-utils

Selanjutnya, buat file kata sandi dan pengguna menggunakan alat htpasswd seperti yang ditunjukkan di bawah ini. Alat htpasswd disediakan oleh utilitas apache2-utils.

sudo htpasswd -c / etc / apache2 / .htpasswd mike

Anda dapat mengkonfirmasi apakah Anda telah berhasil membuat kata sandi pengguna dan acak melalui perintah berikut

cat etc / apache2 / .htpasswd

Di dalam bagian lokasi, Anda dapat menempelkan kode berikut untuk meminta pengguna melakukan otentikasi menggunakan arahan auth_basic.

lokasi / admin {

basic_auth "Area Admin";
auth_basic_user_file / etc / apache2 / .htpasswd;

}

Dengan memanfaatkan arahan Allow

Selain arahan basic_auth, kita dapat menggunakan arahan allow untuk membatasi akses.

Di dalam bagian lokasi, Anda dapat menggunakan kode berikut untuk memungkinkan alamat IP yang ditentukan untuk mengakses area sensitif.

lokasi / admin {
izinkan 192.168.34.12;
izinkan 192.168.12.34;
}

Konfigurasikan log untuk memantau aktivitas berbahaya

Di bagian ini, kami akan mengonfigurasi log kesalahan dan akses untuk secara khusus memantau permintaan yang valid dan tidak valid. Anda dapat memeriksa log ini untuk mengetahui siapa yang masuk pada waktu tertentu, atau pengguna mana yang mengakses file tertentu dan seterusnya.

error_log: Memungkinkan Anda mengatur pendataan ke file tertentu seperti syslog atau stderr. Anda juga dapat menentukan tingkat pesan kesalahan yang ingin Anda login.

access_log: Memungkinkan untuk menulis permintaan pengguna ke file access.log

Di dalam bagian HTTP, Anda dapat menggunakan yang berikut ini.

http {

gabungan log access_log / access.log;
error_log log / warn.log warn;

}

Cegah DDOS

Anda dapat melindungi Nginx dari serangan DDOS dengan metode berikut:

Membatasi permintaan pengguna 

Anda dapat menggunakan arahan limit_req_zone dan arahan limit_req untuk membatasi laju permintaan yang dikirim oleh pengguna dalam hitungan menit.

Tambahkan kode berikut di bagian lokasi yang tertanam di bagian server.

limit_req_zone $ binary_remote_addr zone = satu: tingkat 10m = 30r / m;

server {
location /admin.html {
limit_req zone = satu;
}

}

Batasi jumlah koneksi 

Anda dapat menggunakan arahan limit_conn dan limit_conn_zone untuk membatasi koneksi ke lokasi atau area tertentu. Misalnya, kode di bawah ini menerima 15 koneksi dari klien untuk periode tertentu.

Kode berikut akan menuju ke bagian lokasi.

limit_conn_zone $ binary_remote_addr zone = addr: 10m;

server {

lokasi / produk / {
limit_conn addr 10;

}
}

Hentikan koneksi yang lambat   

Anda dapat menggunakan arahan timeout seperti client_body_timeout dan client_header_timeout untuk mengontrol berapa lama Nginx akan menunggu penulisan dari tubuh klien dan header klien.

Tambahkan berikut ini di dalam bagian server.

server {
client_body_timeout 5s;
client_header_timeout 5s;
}

Ini juga merupakan ide yang bagus untuk menghentikan serangan DDoS di ujung dengan memanfaatkan solusi berbasis cloud seperti yang disebutkan di sini.

Nonaktifkan daftar direktori

Anda dapat menggunakan direktif auto_index untuk mencegah daftar direktori seperti yang ditunjukkan pada kode di bawah ini. Anda perlu mengaturnya ke nilai off untuk menonaktifkan daftar direktori.

lokasi / {
auto_index mati;
}

Kesimpulan

Kami telah mengkonfigurasi server web Nginx agar berfungsi secara efektif dan mengamankannya dari penyalahgunaan berlebihan di lingkungan produksi. Jika Anda menggunakan Nginx untuk aplikasi web yang menghadapi Internet, maka Anda juga harus mempertimbangkan menggunakan CDN dan keamanan berbasis cloud untuk kinerja dan keamanan yang lebih baik..

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map