Otu esi egbochi ọnụego njikọ (arịrịọ) na NGINX


N'edemede ikpeazụ anyị bụ akụkụ nke usoro njikwa okporo ụzọ NGINX anyị, anyị tụlere ka esi amachi ọnụ ọgụgụ njikọ na NGINX. N'ime ntuziaka a, anyị ga-eleba anya ka esi amachi ọnụ ahịa arịrịọ na NGINX.

Mbelata ọnụego bụ usoro njikwa okporo ụzọ eji machibido ọnụ ọgụgụ HTTP arịrịọ onye ahịa nwere ike ime n'ime oge enyere - a na-agbakọ oke ọnụego na Arịrịọ Per Second (ma ọ bụ RPS).

Ihe atụ nke arịrịọ bụ arịrịọ GET maka ibe nbanye nke ngwa ma ọ bụ arịrịọ POST n'ụdị nbanye ma ọ bụ POST na njedebe API.

Enwere ọtụtụ ihe mere ị ga-eji belata ọnụego arịrịọ na ngwa weebụ gị ma ọ bụ ọrụ API, otu bụ nchekwa: ichedo megide arịrịọ ngwa ngwa mkparị.

Oke ọnụ ọgụgụ njikọ dị na NGINX

Malite site n'ịkọwapụta paramita maka njedebe ọnụego site na iji ntuziaka limit_req_zone. Ihe ndị a chọrọ bụ igodo iji chọpụta ndị ahịa, mpaghara ebe nchekwa na-ekekọrịta ga-echekwa ọnọdụ igodo yana ugboro ole ọ nwetara URL machibidoro arịrịọ, yana ọnụego.

Ntuziaka limit_req_zone bara uru n'ime ọnọdụ HTTP.

limit_req_zone $binary_remote_addr zone=limitreqsbyaddr:20m rate=10r/s;

Ọzọkwa, tọọ koodu nzaghachi nke eweghachiri na arịrịọ jụrụ, na-eji limit_req_status ntuziaka nke dị n'ime HTTP, sever, na ọnọdụ ọnọdụ.

limit_req_status 429;

Ugbu a, ị nwere ike iji ntuziaka limint_conn iji mee ka njedebe ọnụego arịrịọ n'ime HTTP, sever, na ọnọdụ ọnọdụ. Ọ na-ewe mpaghara ebe nchekwa dị ka oke na paramita nhọrọ ndị ọzọ.

limit_req zone=limitreqsbyaddr;

Ọmụmaatụ nhazi ndị a na-egosi ịmachi ọnụ ahịa arịrịọ na API ngwa weebụ. Ogo ebe nchekwa nkekọrịta bụ 20 MB yana oke ọnụego arịrịọ bụ arịrịọ iri kwa nkeji.

upstream api_service {
    server 127.0.0.1:9051;
    server 10.1.1.77:9052;
}
limit_req_zone $binary_remote_addr zone=limitreqsbyaddr:20m rate=10r/s;
limit_req_status 429;

server {
    listen 80;
    server_name testapp.linux-console.net;
    root /var/www/html/testapp.linux-console.net/build;
    index index.html;

    #include snippets/error_pages.conf;
    proxy_read_timeout 600;
    proxy_connect_timeout 600;
    proxy_send_timeout 600;
    location / {
        try_files $uri $uri/ /index.html =404 =403 =500;
    }
    location /api {
        limit_req zone=limitreqsbyaddr;
        proxy_pass http://api_service;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

       
   }
}

Chekwaa faịlụ nhazi gị wee mechie ya.

Wee lelee ma syntax nhazi NGINX ziri ezi site na iji iwu a:

$ sudo nginx -t

Mgbe nke ahụ gasịrị, bugharịa ọrụ NGINX tinye mgbanwe kachasị ọhụrụ:

$ sudo systemctl reload nginx

Ozugbo oke ọnụego nke arịrịọ 10 kwa sekọnd gafere site na otu onye ahịa na-enweta /api/, NGINX weghachiri onye ahịa mperi\429 ọtụtụ arịrịọ.

Ọ na-edekwa ihe merenụ na ndekọ njehie.

2022/04/29 00:30:38 [error] 3145846#0: *131039 limiting requests, excess: 0.990 by zone "limitreqsbyaddr", client: 192.168.1.10, server: testapp.linux-console.net, request: "GET /api/v1/app/meta-data HTTP/1.1", host: "testapp.linux-console.net", referrer: "https://testapp.linux-console.net/"

Mgbe ụfọdụ dabere na ụdị ngwa gị ma ọ bụ API, onye ahịa ga-achọ ịrịọ ọtụtụ arịrịọ n'otu oge, wee belata ọnụego ya ruo oge ụfọdụ tupu ịmekwu ihe. NGINX nwekwara ike chekwa arịrịọ ngafe ọ bụla n'ahịrị wee hazie ya ozugbo.

Ị nwere ike mee ka omume a dị na njedebe ọnụego site na iji burst parameter na limit_req ntụziaka. Iji mee ka ị kwụ n'ahịrị n'egbughị oge, gbakwunye oke nodelay.

limit_req zone=limitreqsbyaddr burst=20 nodelay;

Enwere snag nwere oke ọnụego dabere na IP nke onye ahịa, ọkachasị maka ndị ọrụ na-enweta ngwa gị site na otu netwọkụ ahụ ma na-arụ ọrụ n'azụ NAT. N'okwu a, arịrịọ ha niile ga-esi n'otu adreesị IP pụta. N'ọnọdụ dị otú ahụ, ịnwere ike iji mgbanwe ndị ọzọ iji chọpụta ndị ahịa dịka kuki nnọkọ.

Maka ozi ndị ọzọ gbasara ịmachi ọnụ ahịa arịrịọ, lelee NGINX ọnụego a na-amachi na webụsaịtị NGINX. Ọzọ, anyị ga-ekpuchi otu esi amachi ojiji bandwit na NGINX.