Π‘Π»Π΅Π΄ Π³ΠΎΠ΄ΠΈΠ½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½ΠΎΠ²Π°ΡΠ° ΡΡΠ°Π±ΠΈΠ»Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° Π²ΠΈΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅Π½ HTTP ΡΡΡΠ²ΡΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π΅Π½ ΠΏΡΠΎΠΊΡΠΈ-ΡΡΡΠ²ΡΡ , ΠΊΠΎΡΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡΠ°, Π½Π°ΡΡΡΠΏΠ°Π½ΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΊΠ»ΠΎΠ½ 1.17.x. Π Π±ΡΠ΄Π΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΡΡΠ°Π±ΠΈΠ»Π½Π°ΡΠ° ΠΊΠ»ΠΎΠ½ 1.18 ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΠΈΠΎΠ·Π½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ ΠΈ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ. Π‘ΠΊΠΎΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΠΎΡΠ½ΠΎΠ²Π΅Π½ ΠΊΠ»ΠΎΠ½ Π½Π° nginx 1.19, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° Π½ΠΎΠ²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΠ° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½ΡΠΌΠ°Ρ Π·Π°Π΄Π°ΡΠ° Π΄Π° ΠΎΡΠΈΠ³ΡΡΡΡ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ Π²ΡΠ½ΡΠ½ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΏΡΠ΅ΠΏΠΎΡΡΡΠΈΡΠ΅Π»Π½ΠΎ Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ, Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΊΠΎΡΡΠΎ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΡΡΠΈ ΠΌΠ΅ΡΠ΅ΡΠ° ΡΠ΅ ΠΎΡΠΎΡΠΌΡΡ ΠΈΠ·Π΄Π°Π½ΠΈΡ Π½Π° ΡΡΡΠ³ΠΎΠ²ΡΠΊΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡ Nginx Plus.
Π ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Ρ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Netcraft, nginx ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π° 19.56% ΠΎΡ Π²ΡΠΈΡΠΊΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΈ ΡΠ°ΠΉΡΠΎΠ²Π΅ (ΠΏΡΠ΅Π΄ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° 20.73%, Π΄Π²Π΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΏΡΠ΅Π΄ΠΈ 21.02%), ΠΊΠΎΠ΅ΡΠΎ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° Π²ΡΠΎΡΠΎ ΠΌΡΡΡΠΎ ΠΏΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡ Π² ΡΠ°Π·ΠΈ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ (Π΄ΡΠ» Π½Π° Apache Π΅ 27.64%, Google β 10.03%, Microsoft IIS β 4.77%). ΠΡΠΈ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ°ΠΉΡΠΎΠ²Π΅ nginx Π·Π°ΠΏΠ°Π·Π²Π° Π»ΠΈΠ΄Π΅ΡΡΡΠ²ΠΎΡΠΎ ΠΈ Π·Π°Π΅ΠΌΠ° 36.91% ΠΎΡ ΠΏΠ°Π·Π°ΡΠ° (ΠΏΡΠ΅Π΄ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° 27.52%), Π΄ΠΎΠΊΠ°ΡΠΎ Π΄ΡΠ» Π½Π° Apache Π΅ 24.73%, Microsoft IIS β 12.85%, Google β 3.42%.
Π‘ΡΠ΅Π΄ ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈΡΠ΅ Π½Π°ΠΉ-ΠΏΠΎΡΠ΅ΡΠ°Π²Π°Π½ΠΈ ΡΠ°ΠΉΡΠΎΠ²Π΅ Π² ΡΠ²Π΅ΡΠ° Π΄ΡΠ»ΡΡ Π½Π° nginx Π΅ 25.54% (ΠΏΡΠ΅Π΄ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° 26.22%, Π΄Π²Π΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΏΡΠ΅Π΄ΠΈ 23.76%). ΠΠ°ΡΡΠΎΡΡΠΈΡΡ Π±ΡΠΎΠΉ ΡΠ°ΠΉΡΠΎΠ²Π΅, ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½ΠΈ ΠΎΡ nginx, Π΅ ΠΎΠΊΠΎΠ»ΠΎ 459 ΠΌΠ»Π½ (ΠΏΡΠ΅Π΄ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° 397 ΠΌΠ»Π½). ΠΠΎ W3Techs, nginx ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π° 31.9% ΠΎΡ ΡΠ°ΠΉΡΠΎΠ²Π΅ΡΠ΅ ΡΡΠ΅Π΄ ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈΡΠ΅ Π½Π°ΠΉ-ΠΏΠΎΡΠ΅ΡΠ°Π²Π°Π½ΠΈ, ΠΏΡΠ΅Π· Π°ΠΏΡΠΈΠ» ΠΌΠΈΠ½Π°Π»Π°ΡΠ° Π³ΠΎΠ΄ΠΈΠ½Π° ΡΠΎΠ·ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π» Π±Π΅ΡΠ΅ 41.8%, ΠΏΡΠ΅Π΄ΠΈ Π΄Π²Π΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ β 38% (ΡΠΏΠ°Π΄ΡΡ ΡΠ΅ ΠΎΠ±ΡΡΠ½ΡΠ²Π° Ρ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ΡΠΎ ΠΊΡΠΌ ΠΎΡΠ΄Π΅Π»Π½ΠΎ ΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° http-ΡΠ΅ΡΠ²Π΅ΡΠ° Cloudflare). ΠΡΠ»ΡΡ Π½Π° Apache Π·Π° Π³ΠΎΠ΄ΠΈΠ½Π° Π΅ Π½Π°ΠΌΠ°Π»ΡΠ» ΠΎΡ 43.6% Π΄ΠΎ 38.9%, Π° Π΄ΡΠ»ΡΡ Π½Π° Microsoft IIS ΠΎΡ 8.6% Π΄ΠΎ 8.3%. Π Π ΡΡΠΈΡ, nginx Π½Π° 78.9% ΠΎΡ Π½Π°ΠΉ-ΠΏΠΎΡΠ΅ΡΠ°Π²Π°Π½ΠΈΡΠ΅ ΡΠ°ΠΉΡΠΎΠ²Π΅ (ΠΏΡΠ΅Π΄ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° β 81%).
ΠΠ°ΠΉ-Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΊΠ»ΠΎΠ½ 1.17.x:
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° , ΠΊΠΎΠΉΡΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΏΡΠΎΠ±Π΅Π½ ΡΡΠ°ΡΡ, ΠΏΡΠΈ ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π·Π° ΠΈΠ½ΡΠ΅Π½Π·ΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈ (Π±Π΅Π· rate limit), Π½ΠΎ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΡΠΈΡΠ° ΠΈΠ·Ρ ΠΎΠ΄ΡΡΠΈΡΡ Π±ΡΠΎΠΉ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅, ΠΊΠΎΠΉΡΠΎ Π½Π°Π΄Π²ΠΈΡΠ°Π²Π° Π»ΠΈΠΌΠΈΡΠΈΡΠ΅ Π² ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΠ΅Ρ;
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° , ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΡΠ° ΠΌΠΎΠ΄ΡΠ»Π° ngx_http_limit_conn_module Π² ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΏΡΠΎΠ±Π΅Π½ ΠΏΡΡΠΊ, ΠΏΡΠΈ ΠΊΠΎΠΉΡΠΎ Π±ΡΠΎΡΡ Π½Π° Π²ΡΡΠ·ΠΊΠΈΡΠ΅ Π½Π΅ Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½, Π½ΠΎ ΡΠ΅ ΠΎΡΡΠΈΡΠ°;
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ««, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π·Π°ΠΊΡΡΠ½Π΅Π½ΠΈΠ΅ Π·Π° Π½Π΅Π°Π²ΡΠΎΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ Ρ ΠΊΠΎΠ΄ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ 401, Π·Π° Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ°Π»ΠΈ ΠΈΠ½ΡΠ΅Π½Π·ΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΠΎΠ΄Π±ΠΎΡΠ° Π½Π° ΠΏΠ°ΡΠΎΠ»ΠΈ ΠΈ Π·Π°ΡΠΈΡΠ° ΠΎΡ , ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ°ΡΠΈ ΠΈΠ·ΠΌΠ΅ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (timing attack) ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠΈΡΡΠ΅ΠΌΠΈ, Π΄ΠΎΡΡΡΠΏΡΡ Π΄ΠΎ ΠΊΠΎΠΈΡΠΎ Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ , ΠΈΠ»ΠΈ (JSON Web Token);
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΈΡΠ΅ βlimit_rateβ ΠΈ βlimit_rate_afterβ, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΈΡΠ΅ βproxy_upload_rateβ ΠΈ βproxy_download_rateβ Π½Π° ΠΌΠΎΠ΄ΡΠ»Π° stream;
- Π Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ Π°Π΄ΡΠ΅ΡΠ°. ΠΠΊΠΎ Π°Π΄ΡΠ΅ΡΡΡ Π΅ ΡΠΊΠ°Π·Π°Π½ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½, ΠΈΠΌΠ΅ΡΠΎ ΡΠ΅ ΡΡΡΡΠΈ ΡΡΠ΅Π΄ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΠ΅ Π³ΡΡΠΏΠΈ ΡΡΡΠ²ΡΡΠΈ ΠΈ, Π°ΠΊΠΎ Π½Π΅ Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΎ, ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° resolverβa;
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ , ΠΊΠΎΠΈΡΠΎ ΡΡΠ΄ΡΡΠΆΠ°Ρ Π°Π΄ΡΠ΅ΡΠ° ΠΈ ΠΏΠΎΡΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ°, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ ΠΎΡ Π·Π°Π³Π»Π°Π²ΠΊΠ°ΡΠ° Π½Π° PROXY ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°;
- Π ΠΌΠΎΠ΄ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° , ΠΊΠΎΡΡΠΎ ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π±ΡΠΎΡ Π½Π° Π²ΡΡΠ·ΠΊΠΈΡΠ΅: PASSED, REJECTED ΠΈΠ»ΠΈ REJECTED_DRY_RUN;
- Π ΠΌΠΎΠ΄ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° , ΠΊΠΎΡΡΠΎ ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΠΏΠΎΡΡΡΠΏΠ²Π°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ: PASSED, DELAYED, REJECTED, DELAYED_DRY_RUN ΠΈΠ»ΠΈ REJECTED_DRY_RUN;
- ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π΅ ΠΎΡΠΈΠ³ΡΡΠ΅Π½Π° ΡΠ±ΠΎΡΠΊΠ° Π½Π° ΠΌΠΎΠ΄ΡΠ»Π° ;
- ΠΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ βlocationβ ΡΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄Π° $r->internal_redirect(), ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½ ΠΎΡ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡ Perl ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ. Π’ΠΎΠ·ΠΈ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅Π³Π° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° URI Ρ Π΅ΡΠΊΠ΅ΠΉΠΏΠΈΡΠ°Π½ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ;
- ΠΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π² Π±Π»ΠΎΠΊΠ° Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Β«upstreamΒ» Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΡΠ° «» Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π±Π°Π»Π°Π½ΡΠΈΡΠ°Π½Π΅ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Ρ ΠΏΡΠΈΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊΡΠΌ ΡΡΡΠ²ΡΡΠ°, Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡΠ°Π·Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΠΊΠ»ΡΡΠ°, ΡΠ΅Π³Π° ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ Π±Π°Π»Π°Π½ΡΠΈΡΠ°Π½Π΅ (round-robin);
- ΠΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ioctl(FIONREAD), Π°ΠΊΠΎ Π΅ Π½Π°Π»ΠΈΡΠ½ΠΎ, Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π΅ ΡΠ΅ΡΠ΅Π½Π΅ΡΠΎ ΠΎΡ Π±ΡΡΠ·Π° Π²ΡΡΠ·ΠΊΠ° Π·Π° Π΄ΡΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
