Penapisan permintaan HTTP Nginx dan analisis prestasi proksi terbalik

WBOY
Lepaskan: 2023-06-10 13:52:27
asal
1576 orang telah melayarinya

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.

  1. Pelaksanaan penapisan permintaan HTTP

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;
            }
            ...
        }
    }
}
Salin selepas log masuk

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.

  1. Pelaksanaan proksi terbalik

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;
        }
    }
}
Salin selepas log masuk
Salin selepas log masuk

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.

  1. Ujian dan analisis prestasi

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/
Salin selepas log masuk

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
Salin selepas log masuk

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;
        }
    }
}
Salin selepas log masuk
Salin selepas log masuk
ab -n 1000 http://localhost/
Salin selepas log masuk

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
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan