Server STB – Cara NGINX untuk Performa Terbaik di STB. Untuk konfigurasi ini Anda dapat menggunakan web server yang Anda suka, dalam artikel ini maka saya memutuskan untuk menggunakan nginx sebagai web server.
Secara umum, nginx yang dikonfigurasi dengan benar dapat menangani hingga 400K hingga 500K permintaan per detik (berkelompok), sebagian besar yang terlihat adalah 50K hingga 80K (tidak berkerumun) permintaan per detik dan 30% beban CPU, tentu saja, ini adalah 2 x Intel Xeon dengan HyperThreading yang diaktifkan, dan dapat bekerja tanpa masalah pada mesin yang lebih lambat.
Anda harus memahami bahwa konfigurasi ini digunakan dalam lingkungan pengujian dan bukan dalam produksi sehingga Anda perlu menemukan cara untuk mengimplementasikan sebagian besar fitur tersebut sebaik mungkin untuk server Anda.
yum install nginx
apt install nginx
Backup konfigurasi aslinya dan Anda dapat mulai mengkonfigurasi ulang. Anda harus membuka nginx.conf dengan menggunakan editor yang anda sukai :
/etc/nginx/nginx.conf
# you must set worker processes based on your CPU cores, nginx does not benefit from setting more than that worker_processes auto; #some last versions calculate it automatically # number of file descriptors used for nginx # the limit for the maximum FDs on the server is usually set by the OS. # if you don't set FD's then OS settings will be used which is by default 2000 worker_rlimit_nofile 100000; # only log critical errors error_log /var/log/nginx/error.log crit; # provides the configuration file context in which the directives that affect connection processing are specified. events { # determines how much clients will be served per worker # max clients = worker_connections * worker_processes # max clients is also limited by the number of socket connections available on the system (~64k) worker_connections 4000; # optimized to serve many clients with each thread, essential for linux -- for testing environment use epoll; # accept as many connections as possible, may flood worker connections if set too low -- for testing environment multi_accept on; } http { # cache informations about FDs, frequently accessed files # can boost performance, but you need to test those values open_file_cache max=200000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; # to boost I/O on HDD we can disable access logs access_log off; # copies data between one FD and other from within the kernel # faster than read() + write() sendfile on; # send headers in one piece, it is better than sending them one by one tcp_nopush on; # don't buffer data sent, good for small data bursts in real time tcp_nodelay on; # reduce the data that needs to be sent over network -- for testing environment gzip on; # gzip_static on; gzip_min_length 10240; gzip_comp_level 1; gzip_vary on; gzip_disable msie6; gzip_proxied expired no-cache no-store private auth; gzip_types # text/html is always compressed by HttpGzipModule text/css text/javascript text/xml text/plain text/x-component application/javascript application/x-javascript application/json application/xml application/rss+xml application/atom+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml; # allow the server to close connection on non responding client, this will free up memory reset_timedout_connection on; # request timed out -- default 60 client_body_timeout 10; # if client stop responding, free up memory -- default 60 send_timeout 2; # server will close connection after this time -- default 75 keepalive_timeout 30; # number of requests client can make over keep-alive -- for testing environment keepalive_requests 100000; }
Simpan kode diatas lalu jalankan perintah dibawah ini.
<code class="EnlighterJSRAW" data-enlighter-language="generic">nginx -s reload</code>
/etc/init.d/nginx start|restart
Jika ingin menguji konfigurasi, silahkan jalankan perintah berikut :
nginx -t
/etc/init.d/nginx configtest
Jika ingin aman maka ketik perintah berikut
server_tokens off;
Hal ini jauh dari pertahanan DDoS yang aman tetapi dapat memperlambat beberapa DDoS kecil. Konfigurasi tersebut juga dalam lingkungan pengujian dan Anda harus melakukan penilaian sendiri.
# limit the number of connections per single IP
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
# limit the number of requests for a given session
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;
# zone which we want to limit by upper values, we want limit whole server
server {
limit_conn conn_limit_per_ip 10;
limit_req zone=req_limit_per_ip burst=10 nodelay;
}
# if the request body size is more than the buffer size, then the entire (or partial)
# request body is written into a temporary file
client_body_buffer_size 128k;
# buffer size for reading client request header -- for testing environment
client_header_buffer_size 3m;
# maximum number and size of buffers for large headers to read from client request
large_client_header_buffers 4 256k;
# read timeout for the request body from client -- for testing environment
client_body_timeout 3m;
# how long to wait for the client to send a request header -- for testing environment
client_header_timeout 3m;
Selanjutnya lakukan pengujian konfigurasi lagi.
nginx -t # /etc/init.d/nginx configtest
Setelah selesai lakukan restart pada nginx
nginx -s reload
/etc/init.d/nginx reload|restart
Selanjutnya lakukan pengujian konfigurasi dengan tsung dan jika hasilnya sudah sesuai, tekan tombol Ctrl+C pada keyboard agar dapat berjalan selama berjam-jam.
Dua cara untuk menaikkan batas nofile/max open files/file descriptors/file handles untuk NGINX di RHEL/CentOS 7+. NGINX yang berjalan, dan memeriksa batas saat ini pada proses master.
$ cat /proc/$(cat /var/run/nginx.pid)/limits | grep open.files Max open files 1024 4096 files
Dan proses kerjanya
ps --ppid $(cat /var/run/nginx.pid) -o %p|sed '1d'|xargs -I{} cat /proc/{}/limits|grep open.files Max open files 1024 4096 files Max open files 1024 4096 files
Lalu silahkan coba
worker_rlimit_nofile directive in {,/usr/local}/etc/nginx/nginx.conf fails as SELinux policy doesn't allow setrlimit. This is shown in /var/log/nginx/error.log
015/07/24 12:46:40 [alert] 12066#0: setrlimit(RLIMIT_NOFILE, 2342) failed (13: Permission denied)
dan dalam file /var/log/audit/audit.log
type=AVC msg=audit(1437731200.211:366): avc: denied { setrlimit } for pid=12066 comm="nginx" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:httpd_t:s0 tclass=process
nolimit tanpa menggunakan sistem
# /etc/security/limits.conf # /etc/default/nginx (ULIMIT) $ nano /etc/security/limits.d/nginx.conf nginx soft nofile 65536 nginx hard nofile 65536 $ sysctl -p
nolimit dengan menggunakan sistem
$ mkdir -p /etc/systemd/system/nginx.service.d $ nano /etc/systemd/system/nginx.service.d/nginx.conf [Service] LimitNOFILE=30000 $ systemctl daemon-reload $ systemctl restart nginx.service
httpd_setrlimit
to true(1)Penetapan batas fd dalam proses kerja
worker_rlimit_nofile directive in {,/usr/local}/etc/nginx/nginx.conf
Dan jalankan menggunakan root dengan perintah berikut :
setsebool -P httpd_setrlimit 1
Secara default max_ranges tidak dibatasi. Serangan DoS bisa dari banyak Range-Requests (Dampak pada stabilitas I/O).
Socket type | Latency (ms) | Latency stdev (ms) | CPU Load |
---|---|---|---|
Default | 15.65 | 26.59 | 0.3 |
accept_mutex off | 15.59 | 26.48 | 10 |
reuseport | 12.35 | 3.15 | 0.3 |
Pengiriman file multi-utas saat ini hanya didukung oleh sistem operasi Linux. Tanpa batas sendfile_max_chunk, satu koneksi yang cepat dan dapat menyita seluruh proses pekerja.
map $ssl_preread_protocol $upstream { "" ssh.example.com:22; "TLSv1.2" new.example.com:443; default tls.example.com:443; } # ssh and https on the same port server { listen 192.168.0.1:443; proxy_pass $upstream; ssl_preread on; }
Selesai selamat mencoba.
Semoga artikel ini membantu anda lebih memahami Nginx. Jangan sungkan tinggalkan komentar di bawah jika anda memiliki pertanyaan. Sampai jumpa di artikel selanjutnya.
Dalam era digital yang semakin maju, akses internet menjadi kebutuhan pokok bagi masyarakat. Salah satu…
Internet telah menjadi kebutuhan vital di era modern ini, memberikan akses informasi, komunikasi, dan hiburan…
Set-Top Box (STB) adalah perangkat yang telah lama digunakan untuk mengubah televisi konvensional menjadi pusat…
Pengenalan: Server STB (Set-Top Box) adalah perangkat yang digunakan untuk mengelola konten dan layanan televisi…
Sebelum memulai, penting untuk diketahui bahwa mengakses internet gratis dengan menggunakan VPN bukanlah praktik yang…
Sebelum memulai tutorial ini, pastikan bahwa STB Anda telah membuka akses root, karena Anda membutuhkan…