Rumah > Artikel > Operasi dan penyelenggaraan > Penapisan permintaan HTTP Nginx dan analisis prestasi proksi terbalik
Penapisan permintaan HTTP Nginx dan analisis prestasi proksi terbalik
Nginx ialah pelayan HTTP dan pelayan proksi terbalik yang digunakan secara meluas dalam industri Disebabkan reka bentuknya yang ringkas dan prestasi cemerlang, ia telah menjadi sebilangan besar web aplikasi , pelayan pilihan untuk sistem awan dan aplikasi mudah alih. Dalam aplikasi praktikal, Nginx bukan sahaja bertanggungjawab untuk memproses dan membalas permintaan HTTP, tetapi juga melakukan penapisan permintaan HTTP dan proksi terbalik. Artikel ini akan menganalisis pelaksanaan penapisan permintaan HTTP Nginx dan proksi terbalik, serta melaksanakan ujian dan analisis prestasi.
Nginx menyediakan modul penapisan permintaan HTTP berdasarkan ungkapan biasa, yang boleh memintas permintaan HTTP yang layak untuk menghalang Penapisan permintaan atau perlindungan yang berniat jahat daripada sumber yang ditentukan. Tambahkan kod berikut pada fail konfigurasi Nginx untuk mendayakan penapisan permintaan HTTP:
http { server { location / { if ($http_user_agent ~* Firefox) { return 403; } ... } } }
Dalam kod di atas, $http_user_agent ialah pembolehubah terbina dalam Nginx, yang mewakili medan User-Agent dalam pengepala permintaan HTTP , dan ~* mewakili ungkapan biasa Jika rentetan Firefox dipadankan, ralat 403 akan dikembalikan. Dengan cara ini, kami boleh menapis satu atau lebih jenis permintaan.
Modul penapisan permintaan HTTP Nginx juga menyediakan jenis pembolehubah dan arahan lain, seperti $http_referer, $request_method, $remote_addr, dll., yang boleh digunakan untuk melaksanakan penapisan kompleks permintaan HTTP yang boleh dilihat oleh Pembaca dokumen Ketahui lebih lanjut.
Fungsi proksi terbalik Nginx boleh memajukan proksi permintaan klien ke pelayan aplikasi belakang, dan kemudian pelayan aplikasi belakang mengembalikan Hasilnya. Nginx mengembalikan keputusan kepada pelanggan untuk mencapai pengimbangan beban dan meningkatkan prestasi.
Berikut ialah konfigurasi proksi terbalik yang mudah:
http { upstream myapp { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; location / { proxy_pass http://myapp; } } }
Dalam konfigurasi di atas, kami mentakrifkan huluan bernama myapp, yang menentukan dua pelayan hujung belakang, mendengar pada 8080 dan Port 8081. Dalam blok pelayan, kami mendengar port 80, mengkonfigurasi lokasi /, dan memajukan permintaan ke myapp melalui arahan proxy_pass, dan proksi myapp memajukannya ke pelayan hujung belakang.
Proksi terbalik Nginx juga menyediakan beberapa strategi lanjutan, seperti algoritma pengimbangan beban, pengendalian ralat, kelekatan sesi, dll. Pembaca boleh merujuk kepada dokumen yang berkaitan untuk mengetahui lebih lanjut.
Melalui analisis di atas, kita dapat melihat bahawa fungsi penapisan permintaan HTTP Nginx dan proksi terbalik sangat berkuasa, tetapi dalam aplikasi sebenar kita masih mempunyai Need untuk memberi perhatian kepada prestasinya. Untuk menguji prestasi Nginx, kami menggunakan alat ApacheBench (ab) untuk menguji dan menjalankan eksperimen pada pelayan Ubuntu 20.04.
Pertama ialah ujian penapisan permintaan HTTP Kami menetapkan medan Ejen Pengguna dalam pengepala permintaan kepada "Mozilla/5.0" dan menghantar 1000 permintaan ke pelayan Nginx:
ab -n 1000 -H "User-Agent: Mozilla/5.0" http://localhost/
Ujian. Keputusan Ia menunjukkan bahawa Nginx boleh mengendalikan 22.33 permintaan sesaat, purata masa bagi setiap permintaan ialah 44.76ms, dan 90% daripada permintaan diselesaikan dalam masa 54ms:
Concurrency Level: 1 Time taken for tests: 44.780 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 159000 bytes HTML transferred: 0 bytes Requests per second: 22.33 [#/sec] (mean) Time per request: 44.780 [ms] (mean) Time per request: 44.780 [ms] (mean, across all concurrent requests) Transfer rate: 3.47 [Kbytes/sec] received
Seterusnya ialah ujian proksi terbalik, kami menggunakan Pelayan bahagian belakang yang ringkas digunakan untuk mensimulasikan aplikasi sebenar Setiap masa pemprosesan permintaan ialah 10ms, dan permintaan dimulakan ke dua pelayan bahagian belakang pada masa yang sama:
http { upstream myapp { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; location / { proxy_pass http://myapp; } } }
ab -n 1000 http://localhost/
Keputusan ujian menunjukkan bahawa Nginx boleh mengendalikan 966.41 permintaan sesaat. , dan setiap Purata masa untuk permintaan ialah 1.03ms, dan 90% daripada permintaan diselesaikan dalam masa 2ms:
Concurrency Level: 1 Time taken for tests: 1.034 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 154000 bytes HTML transferred: 0 bytes Requests per second: 966.41 [#/sec] (mean) Time per request: 1.034 [ms] (mean) Time per request: 1.034 [ms] (mean, across all concurrent requests) Transfer rate: 145.42 [Kbytes/sec] received
Daripada keputusan ujian, kita dapat melihat bahawa Nginx mempunyai keupayaan pemintasan dan pemajuan yang sangat kuat untuk HTTP permintaan dan boleh mengendalikan sejumlah besar permintaan dan mengekalkan prestasi tinggi. Walau bagaimanapun, prestasi Nginx juga dihadkan oleh faktor seperti keupayaan perkakasan pelayan, parameter sistem pengendalian, dan konfigurasi Nginx Pembaca perlu menyesuaikan dan mengoptimumkan mengikut keadaan sebenar dalam aplikasi sebenar.
Kesimpulan
Artikel ini menganalisis penapisan permintaan HTTP Nginx dan fungsi proksi terbalik, memperkenalkan pelaksanaan dan prestasinya serta menjalankan ujian dan analisis mudah. Sebagai pelayan HTTP yang biasa digunakan dan pelayan proksi terbalik, Nginx memberikan kami keupayaan perkhidmatan Web yang berkuasa Pembaca boleh memilih dan mengkonfigurasi modul dan parameter Nginx yang berbeza mengikut keperluan dan persekitaran sebenar untuk mencapai prestasi dan kesan terbaik.
Atas ialah kandungan terperinci Penapisan permintaan HTTP Nginx dan analisis prestasi proksi terbalik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!