Konstruksi server cache reverse proxy nginx
Tag Terkait:1. Nginx Ingress Controller
2. Parse log nginx
Abstrak: Digunakan untuk memproksi permintaan koneksi (seperti VPN/NAT) dari jaringan internal ke Internet.
Layanan proksi dapat dibagi secara sederhana menjadi forward proxy dan reverse proxy:
Forward proxy: Klien menentukan server proksi, dan mengirimkan permintaan HTTP yang awalnya dimaksudkan untuk dikirim langsung ke server Web target ke server proksi, dan kemudian server proksi mengakses server web, dan mengembalikan respons dari server web ke klien:
Reverse proxy: Berkebalikan dengan forward proxy, jika jaringan lokal menyediakan sumber daya ke Internet dan memungkinkan pengguna lain di Internet untuk mengakses sumber daya di jaringan lokal, Anda juga dapat mengatur server proksi, dan layanan yang disediakannya adalah reverse proxy. Server reverse proxy menerima koneksi dari Internet, lalu meneruskan permintaan ke server di jaringan internal dan mengirimkan Respons kembali ke
1. Reverse Proxy berarti server proksi menerima permintaan koneksi dari klien, dan kemudian meneruskan permintaan ke server web (bisa berupa apache, nginx, tomcat, iis, dll.) di jaringan, dan mengirimkan hasil yang diperoleh dari server web dikembalikan ke klien yang meminta koneksi, dan server proksi bertindak sebagai server untuk dunia luar.
Seperti yang dapat dilihat dari gambar di atas: server web situs web proksi reverse proxy menerima permintaan Http dan meneruskan permintaan. Selain itu, sebagai server reverse proxy, nginx dapat meneruskan permintaan ke berbagai server web backend sesuai dengan konten permintaan pengguna, seperti pemisahan statis dan dinamis, dan misalnya, membuat beberapa host virtual di nginx, sehingga dapat berhasil dilakukan di browser. Mengakses berbagai server web atau kluster web di backend saat memasukkan nama domain (url) yang berbeda.
2. Apa peran reverse proxy?
①Melindungi keamanan situs web: setiap permintaan dari Internet harus terlebih dahulu melewati server proksi;
wKioL1jsz9yAHyulAABvTU4R-Ew435.png-wh_50
②Mempercepat permintaan web dengan mengonfigurasi fungsi caching: beberapa sumber daya statis pada server web nyata dapat di-cache untuk mengurangi beban tekanan pada server web nyata;
wKiom1jsz-nwYDqSAABjrKK3l5E661.png-wh_50
③ Mewujudkan load balancing: Bertindak sebagai server load balancing untuk mendistribusikan permintaan secara seimbang, menyeimbangkan beban tekanan setiap server dalam kluster;
wKiom1jsz__Q7RpoAAJQnYSWdA8640.png-wh_50
1. Pengenalan nginx
Nginx adalah server web ringan, reverse proxy, dan server proksi email. Dikenal karena stabilitasnya, kumpulan fitur yang kaya, file konfigurasi contoh, dan konsumsi sumber daya sistem yang rendah. Nginx (dilafalkan dengan engine x) dikembangkan oleh programmer Rusia Igor Sysoev. Awalnya digunakan oleh portal besar Rusia dan mesin pencari Rambler (Rusia: Рамблер). Perangkat lunak ini dirilis di bawah perjanjian mirip BSD dan dapat berjalan di UNIX, GNU/Linux, BSD, Mac OS X, Solaris, dan Microsoft Windows.
Status Aplikasi Nginx
Nginx sudah berjalan di Rambler Media (www.rambler.ru), situs portal terbesar di Rusia, dan lebih dari 20% platform hosting virtual di Rusia menggunakan Nginx sebagai server reverse proxy.
Di Tiongkok, banyak situs web seperti Taobao, Sina Blog, Sina Podcast, Netease News, Liujianfang, 56.com, Discuz!, Komunitas Shuimu, Douban, YUPOO, Domestic, Xunlei Online, dll. sudah menggunakan Nginx sebagai server web atau server reverse proxy.
2. Fitur inti Nginx
(1) Lintas platform: Nginx dapat dikompilasi dan dijalankan di sebagian besar OS, dan ada juga versi Windows;
(2) Konfigurasinya sangat sederhana: sangat mudah untuk memulai.
(3) Non-blocking, koneksi konkuren tinggi: Tes resmi dapat mendukung 50.000 koneksi konkuren, dan di lingkungan produksi aktual, berjalan hingga 20.000 hingga 30.000 koneksi konkuren. (Ini berkat Nginx yang menggunakan model epoll terbaru);
Catatan:
Untuk server web, pertama-tama lihat proses dasar permintaan: membangun koneksi - menerima data - mengirim data, dari bagian bawah sistem: proses di atas (membangun koneksi - menerima data - mengirim data) adalah acara baca dan tulis di bagian bawah sistem.
Jika metode panggilan blocking digunakan, ketika acara baca dan tulis tidak siap, maka satu-satunya cara adalah menunggu, thread saat ini ditangguhkan, dan acara baca dan tulis hanya dapat dilakukan ketika acara sudah siap.
Jika Anda menggunakan metode panggilan non-blocking: acara segera kembali, memberi tahu Anda bahwa acara belum siap, kembali lagi nanti. Setelah beberapa saat, periksa acara lagi hingga acara siap, sementara itu, Anda dapat melakukan hal lain terlebih dahulu, dan kemudian kembali untuk melihat apakah acaranya oke. Meskipun tidak diblokir, Anda harus memeriksa status acara dari waktu ke waktu, Anda dapat melakukan lebih banyak hal, tetapi overhednya tidak kecil. Panggilan non-blocking berarti bahwa panggilan tidak akan memblokir thread saat ini hingga hasilnya tidak segera tersedia
(4) Event-driven: Mekanisme komunikasi mengadopsi model epoll untuk mendukung koneksi konkuren yang lebih besar.
Non-blocking menilai apakah akan melakukan operasi baca dan tulis dengan terus-menerus memeriksa status acara, yang membawa banyak overhead, sehingga ada mekanisme pemrosesan acara non-blocking asinkron. Mekanisme ini memungkinkan Anda memantau beberapa acara secara bersamaan. Memanggilnya bersifat non-blocking, tetapi Anda dapat menetapkan timeout. Dalam timeout, jika suatu acara siap, itu akan kembali. Mekanisme ini memecahkan dua masalah di atas dari panggilan blocking dan panggilan non-blocking.
Ambil model epoll sebagai contoh: ketika acara tidak siap, itu dimasukkan ke dalam epoll (antrian). Jika suatu acara siap, tangani; ketika acara tidak siap, tunggu di epoll. Dengan cara ini, kita dapat memproses sejumlah besar permintaan konkuren secara konkuren. Tentu saja, permintaan konkuren di sini merujuk pada permintaan yang belum diproses. Hanya ada satu thread, jadi tentu saja hanya ada satu permintaan yang dapat diproses pada waktu yang sama. Ini hanyalah peralihan konstan antar permintaan. Peralihan juga secara aktif dilepaskan karena acara asinkron tidak siap. Tidak ada biaya untuk peralihan di sini, Anda dapat memahaminya sebagai pengulangan melalui beberapa acara yang disiapkan.
Dibandingkan dengan metode multi-thread, metode pemrosesan acara ini memiliki keunggulan besar. Tidak perlu membuat thread, dan setiap permintaan menempati sangat sedikit memori. Tidak ada pengalihan konteks. Pemrosesan acara sangat ringan, dan jumlah konkurensi besar. Juga tidak akan menyebabkan pemborosan sumber daya yang tidak perlu (pengalihan konteks). Untuk server apache, setiap permintaan akan memiliki thread pekerja eksklusif, dan ketika jumlah konkurensi mencapai beberapa ribu, akan ada beberapa ribu thread yang memproses permintaan secara bersamaan. Ini adalah tantangan besar bagi sistem operasi: karena penggunaan memori yang disebabkan oleh thread sangat besar, overhead CPU yang disebabkan oleh pengalihan konteks thread sangat besar, dan kinerja alami tidak dapat ditingkatkan, yang mengarah pada kinerja dalam skenario konkurensi tinggi. penurunan serius.
Ringkasan: Melalui mekanisme pemrosesan acara non-blocking asinkron, Nginx mengimplementasikan beberapa acara yang disiapkan yang diproses secara siklis oleh proses, sehingga mencapai konkurensi tinggi dan ringan.
(5) Struktur Master/Worker: satu proses master menghasilkan satu atau lebih proses worker.
Catatan: Mode desain Master-Worker terutama mencakup dua komponen utama, Master dan Worker. Master mempertahankan antrian Worker dan mengirimkan permintaan ke beberapa Worker untuk eksekusi paralel. Worker terutama melakukan perhitungan logika aktual dan mengembalikan hasil ke Master.
Apa manfaat nginx mengadopsi model proses ini? Menggunakan proses independen dapat mencegah saling mempengaruhi satu sama lain. Setelah satu proses keluar, proses lain masih bekerja, dan layanan tidak akan terganggu. Proses Master akan dengan cepat memulai ulang proses Worker baru. Tentu saja, keluarnya abnormal dari proses Worker harus disebabkan oleh bug dalam program. Keluarnya abnormal akan menyebabkan semua permintaan pada Worker saat ini gagal, tetapi tidak akan mempengaruhi semua permintaan, sehingga risikonya berkurang.
(6) Konsumsi memori kecil: Konsumsi memori untuk memproses permintaan konkuren besar sangat kecil. Di bawah 30.000 koneksi konkuren, hanya 150M memori yang dikonsumsi oleh 10 proses Nginx (15M*10=150M).
(7) Fungsi health check bawaan: Jika server web di belakang proksi Nginx mati, itu tidak akan mempengaruhi akses front-end.
(8) Menghemat bandwidth: Kompresi GZIP didukung, dan header Header yang di-cache secara lokal oleh browser dapat ditambahkan.
(9) Stabilitas tinggi: digunakan untuk reverse proxy, probabilitas downtime sangat minim.
nginx mengonfigurasi reverse proxy
Konfigurasikan nginx sebagai reverse proxy dan load balancer, dan gunakan fungsi caching-nya untuk meng-cache halaman statis di nginx untuk mengurangi jumlah koneksi server back-end dan memeriksa kesehatan server web back-end.
wKiom1js0B-iFnITAACVfFt6894317.png-wh_50
1. Instal nginx
lingkungan:
OS: centos7.2
nginx: 192.168.31.83
apache1:192.168.31.141
apache2:192.168.31.250
Instal dependensi seperti zlib-devel dan pcre-devel
[root@www ~]# yum -y install gcc gcc-c++ make libtool zlib zlib-devel pcre pcre-devel openssl openssl-devel
Catatan:
Menggabungkan modul proxy dan upstream untuk mencapai load balancing web back-end
Caching file statis menggunakan modul proxy
Digabungkan dengan modul default nginx ngx_http_proxy_module dan modul ngx_http_upstream_module
Untuk mengimplementasikan health check server backend, Anda juga dapat menggunakan modul pihak ketiga nginx_upstream_check_module
Gunakan modul ekstensi nginx-sticky-module untuk mengimplementasikan penempelan sesi cookie (keep session)
Gunakan ngx_cache_purge untuk mencapai fungsi purge cache yang lebih kuat
Kedua modul yang disebutkan di atas termasuk dalam modul ekstensi pihak ketiga. Anda perlu mengunduh kode sumber sebelumnya, dan kemudian menginstalnya bersama dengan --add-moudle=src_path saat kompilasi.

instal nginx
[root@www ~]# groupadd www #Tambahkan grup www
[root@www ~]# useradd -g www www -s /sbin/nologin #Buat akun running nginx www dan tambahkan ke grup www, dan jangan izinkan pengguna www login langsung ke sistem
#tar zxf nginx-1.10.2.tar.gz
#tar zxf ngx_cache_purge-2.3.tar.gz
#tar zxf master.tar.gz
# cd nginx-1.10.2/
[root@www nginx-1.10.2]# ./configure --prefix=/usr/local/nginx1.10 --user=www --group=www --with-http_stub_status_module --with-http_realip_module --with- http_ssl_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi- temp-path=/var/tmp/nginx/fcgi --with-pcre --add-module=../ngx_cache_purge-2.3 --with-http_flv_module --add-module=../nginx-goodies-nginx-sticky -module-ng-08a395c66e42
[root@www nginx-1.10.2]# make && make install
Catatan: Semua modul nginx harus ditambahkan pada waktu kompilasi dan tidak dapat dimuat secara dinamis pada waktu runtime.
Berikut adalah pengenalan algoritma penjadwalan lain yang didukung oleh modul load balancing nginx:
Polling (default): Setiap permintaan dialokasikan ke server back-end yang berbeda satu per satu secara kronologis. Jika server back-end mati, sistem yang rusak akan secara otomatis dieliminasi, sehingga akses pengguna tidak akan terpengaruh. Weight menentukan bobot polling. Semakin besar nilai Weight, semakin tinggi probabilitas akses yang dialokasikan. Ini terutama digunakan ketika kinerja setiap server di backend tidak merata.
ip_hash: Setiap permintaan dialokasikan menurut hasil hash dari IP akses, sehingga pengunjung dari IP yang sama dapat mengakses server back-end, yang secara efektif menyelesaikan masalah berbagi sesi di halaman web dinamis. Tentu saja, jika node ini tidak tersedia, itu akan dikirim ke node berikutnya, dan jika tidak ada sinkronisasi sesi pada saat ini, itu akan logout.
least_conn : Permintaan dikirim ke realserver dengan koneksi aktif saat ini paling sedikit. Nilai weight akan dipertimbangkan.
url_hash : Metode ini mengalokasikan permintaan menurut hasil hash dari mengakses url, sehingga setiap url diarahkan ke server backend yang sama, yang dapat lebih meningkatkan efisiensi server cache backend. Nginx sendiri tidak mendukung url_hash. Jika Anda perlu menggunakan algoritma penjadwalan ini, Anda harus menginstal paket hash Nginx nginx_upstream_hash .
fair : Ini adalah algoritma load balancing yang lebih cerdas daripada dua di atas. Algoritma ini dapat secara cerdas melakukan load balancing menurut ukuran halaman dan waktu pemuatan, yaitu mengalokasikan permintaan menurut waktu respons server backend, dan memberikan prioritas kepada yang memiliki waktu respons singkat. Nginx sendiri tidak mendukung fair. Jika Anda perlu menggunakan algoritma penjadwalan ini, Anda harus mengunduh modul upstream_fair dari Nginx.
5. Load balancing dan health check:
Secara ketat, nginx tidak memiliki health check untuk node backend load balancing, tetapi dapat diselesaikan oleh instruksi terkait dalam modul default ngx_http_proxy_module dan modul ngx_http_upstream_module. Ketika node backend gagal, itu akan secara otomatis beralih ke node berikutnya untuk menyediakan akses.
weight : Bobot polling juga dapat digunakan di ip_hash, nilai default adalah 1
max_fails : Jumlah kali untuk mengizinkan permintaan gagal, defaultnya adalah 1. Ketika jumlah maksimum kali terlampaui, kesalahan yang ditentukan oleh modul proxy_next_upstream dikembalikan.
fail_timeout: Ini memiliki dua arti, satu adalah mengizinkan hingga 2 kegagalan dalam 10 detik; yang lainnya adalah tidak mengalokasikan permintaan ke server ini dalam 10 detik setelah 2 kegagalan.
6. penggunaan proxy cache nginx:
Caching adalah meng-cache js, css, gambar, dan file statis lainnya dari server back-end ke direktori cache yang ditentukan oleh nginx, yang tidak hanya dapat mengurangi beban pada server back-end, tetapi juga mempercepat kecepatan akses, tetapi menjadi masalah untuk membersihkan cache tepat waktu, sehingga Modul ngx_cache_purge diperlukan untuk membersihkan cache secara manual sebelum waktu kedaluwarsa.
Direktif yang umum digunakan dalam modul proxy adalah proxy_pass dan proxy_cache.
Fungsi caching web nginx terutama diselesaikan oleh set instruksi proxy_cache, fastcgi_cache dan set instruksi terkait. Instruksi proxy_cache bertanggung jawab atas konten statis cache reverse proxy dari server back-end, dan fastcgi_cache terutama digunakan untuk menangani caching proses dinamis FastCGI.
2. Parse log nginx
Abstrak: Digunakan untuk memproksi permintaan koneksi (seperti VPN/NAT) dari jaringan internal ke Internet.
Layanan proksi dapat dibagi secara sederhana menjadi forward proxy dan reverse proxy:
Forward proxy: Klien menentukan server proksi, dan mengirimkan permintaan HTTP yang awalnya dimaksudkan untuk dikirim langsung ke server Web target ke server proksi, dan kemudian server proksi mengakses server web, dan mengembalikan respons dari server web ke klien:
Reverse proxy: Berkebalikan dengan forward proxy, jika jaringan lokal menyediakan sumber daya ke Internet dan memungkinkan pengguna lain di Internet untuk mengakses sumber daya di jaringan lokal, Anda juga dapat mengatur server proksi, dan layanan yang disediakannya adalah reverse proxy. Server reverse proxy menerima koneksi dari Internet, lalu meneruskan permintaan ke server di jaringan internal dan mengirimkan Respons kembali ke
Klien di Internet yang meminta koneksi:
1. reverse proxy nginx: penjadwal server web
1. Reverse Proxy berarti server proksi menerima permintaan koneksi dari klien, dan kemudian meneruskan permintaan ke server web (bisa berupa apache, nginx, tomcat, iis, dll.) di jaringan, dan mengirimkan hasil yang diperoleh dari server web dikembalikan ke klien yang meminta koneksi, dan server proksi bertindak sebagai server untuk dunia luar.
Seperti yang dapat dilihat dari gambar di atas: server web situs web proksi reverse proxy menerima permintaan Http dan meneruskan permintaan. Selain itu, sebagai server reverse proxy, nginx dapat meneruskan permintaan ke berbagai server web backend sesuai dengan konten permintaan pengguna, seperti pemisahan statis dan dinamis, dan misalnya, membuat beberapa host virtual di nginx, sehingga dapat berhasil dilakukan di browser. Mengakses berbagai server web atau kluster web di backend saat memasukkan nama domain (url) yang berbeda.
2. Apa peran reverse proxy?
①Melindungi keamanan situs web: setiap permintaan dari Internet harus terlebih dahulu melewati server proksi;
wKioL1jsz9yAHyulAABvTU4R-Ew435.png-wh_50
②Mempercepat permintaan web dengan mengonfigurasi fungsi caching: beberapa sumber daya statis pada server web nyata dapat di-cache untuk mengurangi beban tekanan pada server web nyata;
wKiom1jsz-nwYDqSAABjrKK3l5E661.png-wh_50
③ Mewujudkan load balancing: Bertindak sebagai server load balancing untuk mendistribusikan permintaan secara seimbang, menyeimbangkan beban tekanan setiap server dalam kluster;
wKiom1jsz__Q7RpoAAJQnYSWdA8640.png-wh_50
2. Apa itu nginx
1. Pengenalan nginx
Nginx adalah server web ringan, reverse proxy, dan server proksi email. Dikenal karena stabilitasnya, kumpulan fitur yang kaya, file konfigurasi contoh, dan konsumsi sumber daya sistem yang rendah. Nginx (dilafalkan dengan engine x) dikembangkan oleh programmer Rusia Igor Sysoev. Awalnya digunakan oleh portal besar Rusia dan mesin pencari Rambler (Rusia: Рамблер). Perangkat lunak ini dirilis di bawah perjanjian mirip BSD dan dapat berjalan di UNIX, GNU/Linux, BSD, Mac OS X, Solaris, dan Microsoft Windows.
Status Aplikasi Nginx
Nginx sudah berjalan di Rambler Media (www.rambler.ru), situs portal terbesar di Rusia, dan lebih dari 20% platform hosting virtual di Rusia menggunakan Nginx sebagai server reverse proxy.
Di Tiongkok, banyak situs web seperti Taobao, Sina Blog, Sina Podcast, Netease News, Liujianfang, 56.com, Discuz!, Komunitas Shuimu, Douban, YUPOO, Domestic, Xunlei Online, dll. sudah menggunakan Nginx sebagai server web atau server reverse proxy.
2. Fitur inti Nginx
(1) Lintas platform: Nginx dapat dikompilasi dan dijalankan di sebagian besar OS, dan ada juga versi Windows;
(2) Konfigurasinya sangat sederhana: sangat mudah untuk memulai.
(3) Non-blocking, koneksi konkuren tinggi: Tes resmi dapat mendukung 50.000 koneksi konkuren, dan di lingkungan produksi aktual, berjalan hingga 20.000 hingga 30.000 koneksi konkuren. (Ini berkat Nginx yang menggunakan model epoll terbaru);
Catatan:
Untuk server web, pertama-tama lihat proses dasar permintaan: membangun koneksi - menerima data - mengirim data, dari bagian bawah sistem: proses di atas (membangun koneksi - menerima data - mengirim data) adalah acara baca dan tulis di bagian bawah sistem.
Jika metode panggilan blocking digunakan, ketika acara baca dan tulis tidak siap, maka satu-satunya cara adalah menunggu, thread saat ini ditangguhkan, dan acara baca dan tulis hanya dapat dilakukan ketika acara sudah siap.
Jika Anda menggunakan metode panggilan non-blocking: acara segera kembali, memberi tahu Anda bahwa acara belum siap, kembali lagi nanti. Setelah beberapa saat, periksa acara lagi hingga acara siap, sementara itu, Anda dapat melakukan hal lain terlebih dahulu, dan kemudian kembali untuk melihat apakah acaranya oke. Meskipun tidak diblokir, Anda harus memeriksa status acara dari waktu ke waktu, Anda dapat melakukan lebih banyak hal, tetapi overhednya tidak kecil. Panggilan non-blocking berarti bahwa panggilan tidak akan memblokir thread saat ini hingga hasilnya tidak segera tersedia
(4) Event-driven: Mekanisme komunikasi mengadopsi model epoll untuk mendukung koneksi konkuren yang lebih besar.
Non-blocking menilai apakah akan melakukan operasi baca dan tulis dengan terus-menerus memeriksa status acara, yang membawa banyak overhead, sehingga ada mekanisme pemrosesan acara non-blocking asinkron. Mekanisme ini memungkinkan Anda memantau beberapa acara secara bersamaan. Memanggilnya bersifat non-blocking, tetapi Anda dapat menetapkan timeout. Dalam timeout, jika suatu acara siap, itu akan kembali. Mekanisme ini memecahkan dua masalah di atas dari panggilan blocking dan panggilan non-blocking.
Ambil model epoll sebagai contoh: ketika acara tidak siap, itu dimasukkan ke dalam epoll (antrian). Jika suatu acara siap, tangani; ketika acara tidak siap, tunggu di epoll. Dengan cara ini, kita dapat memproses sejumlah besar permintaan konkuren secara konkuren. Tentu saja, permintaan konkuren di sini merujuk pada permintaan yang belum diproses. Hanya ada satu thread, jadi tentu saja hanya ada satu permintaan yang dapat diproses pada waktu yang sama. Ini hanyalah peralihan konstan antar permintaan. Peralihan juga secara aktif dilepaskan karena acara asinkron tidak siap. Tidak ada biaya untuk peralihan di sini, Anda dapat memahaminya sebagai pengulangan melalui beberapa acara yang disiapkan.
Dibandingkan dengan metode multi-thread, metode pemrosesan acara ini memiliki keunggulan besar. Tidak perlu membuat thread, dan setiap permintaan menempati sangat sedikit memori. Tidak ada pengalihan konteks. Pemrosesan acara sangat ringan, dan jumlah konkurensi besar. Juga tidak akan menyebabkan pemborosan sumber daya yang tidak perlu (pengalihan konteks). Untuk server apache, setiap permintaan akan memiliki thread pekerja eksklusif, dan ketika jumlah konkurensi mencapai beberapa ribu, akan ada beberapa ribu thread yang memproses permintaan secara bersamaan. Ini adalah tantangan besar bagi sistem operasi: karena penggunaan memori yang disebabkan oleh thread sangat besar, overhead CPU yang disebabkan oleh pengalihan konteks thread sangat besar, dan kinerja alami tidak dapat ditingkatkan, yang mengarah pada kinerja dalam skenario konkurensi tinggi. penurunan serius.
Ringkasan: Melalui mekanisme pemrosesan acara non-blocking asinkron, Nginx mengimplementasikan beberapa acara yang disiapkan yang diproses secara siklis oleh proses, sehingga mencapai konkurensi tinggi dan ringan.
(5) Struktur Master/Worker: satu proses master menghasilkan satu atau lebih proses worker.
Catatan: Mode desain Master-Worker terutama mencakup dua komponen utama, Master dan Worker. Master mempertahankan antrian Worker dan mengirimkan permintaan ke beberapa Worker untuk eksekusi paralel. Worker terutama melakukan perhitungan logika aktual dan mengembalikan hasil ke Master.
Apa manfaat nginx mengadopsi model proses ini? Menggunakan proses independen dapat mencegah saling mempengaruhi satu sama lain. Setelah satu proses keluar, proses lain masih bekerja, dan layanan tidak akan terganggu. Proses Master akan dengan cepat memulai ulang proses Worker baru. Tentu saja, keluarnya abnormal dari proses Worker harus disebabkan oleh bug dalam program. Keluarnya abnormal akan menyebabkan semua permintaan pada Worker saat ini gagal, tetapi tidak akan mempengaruhi semua permintaan, sehingga risikonya berkurang.
(6) Konsumsi memori kecil: Konsumsi memori untuk memproses permintaan konkuren besar sangat kecil. Di bawah 30.000 koneksi konkuren, hanya 150M memori yang dikonsumsi oleh 10 proses Nginx (15M*10=150M).
(7) Fungsi health check bawaan: Jika server web di belakang proksi Nginx mati, itu tidak akan mempengaruhi akses front-end.
(8) Menghemat bandwidth: Kompresi GZIP didukung, dan header Header yang di-cache secara lokal oleh browser dapat ditambahkan.
(9) Stabilitas tinggi: digunakan untuk reverse proxy, probabilitas downtime sangat minim.
3. Nginx+apache membangun load balancing kluster server web
nginx mengonfigurasi reverse proxy
Konfigurasikan nginx sebagai reverse proxy dan load balancer, dan gunakan fungsi caching-nya untuk meng-cache halaman statis di nginx untuk mengurangi jumlah koneksi server back-end dan memeriksa kesehatan server web back-end.
wKiom1js0B-iFnITAACVfFt6894317.png-wh_50
1. Instal nginx
lingkungan:
OS: centos7.2
nginx: 192.168.31.83
apache1:192.168.31.141
apache2:192.168.31.250
Instal dependensi seperti zlib-devel dan pcre-devel
[root@www ~]# yum -y install gcc gcc-c++ make libtool zlib zlib-devel pcre pcre-devel openssl openssl-devel
Catatan:
Menggabungkan modul proxy dan upstream untuk mencapai load balancing web back-end
Caching file statis menggunakan modul proxy
Digabungkan dengan modul default nginx ngx_http_proxy_module dan modul ngx_http_upstream_module
Untuk mengimplementasikan health check server backend, Anda juga dapat menggunakan modul pihak ketiga nginx_upstream_check_module
Gunakan modul ekstensi nginx-sticky-module untuk mengimplementasikan penempelan sesi cookie (keep session)
Gunakan ngx_cache_purge untuk mencapai fungsi purge cache yang lebih kuat
Kedua modul yang disebutkan di atas termasuk dalam modul ekstensi pihak ketiga. Anda perlu mengunduh kode sumber sebelumnya, dan kemudian menginstalnya bersama dengan --add-moudle=src_path saat kompilasi.

instal nginx
[root@www ~]# groupadd www #Tambahkan grup www
[root@www ~]# useradd -g www www -s /sbin/nologin #Buat akun running nginx www dan tambahkan ke grup www, dan jangan izinkan pengguna www login langsung ke sistem
#tar zxf nginx-1.10.2.tar.gz
#tar zxf ngx_cache_purge-2.3.tar.gz
#tar zxf master.tar.gz
# cd nginx-1.10.2/
[root@www nginx-1.10.2]# ./configure --prefix=/usr/local/nginx1.10 --user=www --group=www --with-http_stub_status_module --with-http_realip_module --with- http_ssl_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi- temp-path=/var/tmp/nginx/fcgi --with-pcre --add-module=../ngx_cache_purge-2.3 --with-http_flv_module --add-module=../nginx-goodies-nginx-sticky -module-ng-08a395c66e42
[root@www nginx-1.10.2]# make && make install
Catatan: Semua modul nginx harus ditambahkan pada waktu kompilasi dan tidak dapat dimuat secara dinamis pada waktu runtime.
4. Skema penjadwalan lain untuk load-balance:
Berikut adalah pengenalan algoritma penjadwalan lain yang didukung oleh modul load balancing nginx:
Polling (default): Setiap permintaan dialokasikan ke server back-end yang berbeda satu per satu secara kronologis. Jika server back-end mati, sistem yang rusak akan secara otomatis dieliminasi, sehingga akses pengguna tidak akan terpengaruh. Weight menentukan bobot polling. Semakin besar nilai Weight, semakin tinggi probabilitas akses yang dialokasikan. Ini terutama digunakan ketika kinerja setiap server di backend tidak merata.
ip_hash: Setiap permintaan dialokasikan menurut hasil hash dari IP akses, sehingga pengunjung dari IP yang sama dapat mengakses server back-end, yang secara efektif menyelesaikan masalah berbagi sesi di halaman web dinamis. Tentu saja, jika node ini tidak tersedia, itu akan dikirim ke node berikutnya, dan jika tidak ada sinkronisasi sesi pada saat ini, itu akan logout.
least_conn : Permintaan dikirim ke realserver dengan koneksi aktif saat ini paling sedikit. Nilai weight akan dipertimbangkan.
url_hash : Metode ini mengalokasikan permintaan menurut hasil hash dari mengakses url, sehingga setiap url diarahkan ke server backend yang sama, yang dapat lebih meningkatkan efisiensi server cache backend. Nginx sendiri tidak mendukung url_hash. Jika Anda perlu menggunakan algoritma penjadwalan ini, Anda harus menginstal paket hash Nginx nginx_upstream_hash .
fair : Ini adalah algoritma load balancing yang lebih cerdas daripada dua di atas. Algoritma ini dapat secara cerdas melakukan load balancing menurut ukuran halaman dan waktu pemuatan, yaitu mengalokasikan permintaan menurut waktu respons server backend, dan memberikan prioritas kepada yang memiliki waktu respons singkat. Nginx sendiri tidak mendukung fair. Jika Anda perlu menggunakan algoritma penjadwalan ini, Anda harus mengunduh modul upstream_fair dari Nginx.
5. Load balancing dan health check:
Secara ketat, nginx tidak memiliki health check untuk node backend load balancing, tetapi dapat diselesaikan oleh instruksi terkait dalam modul default ngx_http_proxy_module dan modul ngx_http_upstream_module. Ketika node backend gagal, itu akan secara otomatis beralih ke node berikutnya untuk menyediakan akses.
weight : Bobot polling juga dapat digunakan di ip_hash, nilai default adalah 1
max_fails : Jumlah kali untuk mengizinkan permintaan gagal, defaultnya adalah 1. Ketika jumlah maksimum kali terlampaui, kesalahan yang ditentukan oleh modul proxy_next_upstream dikembalikan.
fail_timeout: Ini memiliki dua arti, satu adalah mengizinkan hingga 2 kegagalan dalam 10 detik; yang lainnya adalah tidak mengalokasikan permintaan ke server ini dalam 10 detik setelah 2 kegagalan.
6. penggunaan proxy cache nginx:
Caching adalah meng-cache js, css, gambar, dan file statis lainnya dari server back-end ke direktori cache yang ditentukan oleh nginx, yang tidak hanya dapat mengurangi beban pada server back-end, tetapi juga mempercepat kecepatan akses, tetapi menjadi masalah untuk membersihkan cache tepat waktu, sehingga Modul ngx_cache_purge diperlukan untuk membersihkan cache secara manual sebelum waktu kedaluwarsa.
Direktif yang umum digunakan dalam modul proxy adalah proxy_pass dan proxy_cache.
Fungsi caching web nginx terutama diselesaikan oleh set instruksi proxy_cache, fastcgi_cache dan set instruksi terkait. Instruksi proxy_cache bertanggung jawab atas konten statis cache reverse proxy dari server back-end, dan fastcgi_cache terutama digunakan untuk menangani caching proses dinamis FastCGI.
Artikel Terkait
-
6 Teknologi Opsional untuk Penyimpanan Data
Tim Knowledge Base
Jelajahi Lebih Banyak Penawaran Spesial
-
Short Message Service (SMS) & Layanan Email
Paket email 50.000 dimulai dari USD 1,99, 120 pesan singkat dimulai dari hanya USD 1,00
