nginx 1.19.7, njs 0.5.1 แƒ“แƒ NGINX Unit 1.22.0 แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ

แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒ“แƒ nginx 1.19.7-แƒ˜แƒก แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒคแƒแƒ แƒ’แƒšแƒ”แƒ‘แƒจแƒ˜แƒช แƒ’แƒ แƒซแƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒแƒฎแƒแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ (แƒžแƒแƒ แƒแƒšแƒ”แƒšแƒฃแƒ แƒแƒ“ แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒš แƒกแƒขแƒแƒ‘แƒ˜แƒšแƒฃแƒ  แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒจแƒ˜ 1.18, แƒ›แƒฎแƒแƒšแƒแƒ“ แƒกแƒ”แƒ แƒ˜แƒแƒ–แƒฃแƒšแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ“แƒแƒฃแƒชแƒ•แƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒแƒฆแƒ›แƒแƒคแƒฎแƒ•แƒ แƒแƒกแƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒฎแƒ“แƒ”แƒ‘แƒ).

แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜:

  • แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ›แƒฃแƒจแƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒแƒ›แƒแƒ˜แƒฌแƒฃแƒ แƒ”แƒ‘แƒ แƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒแƒšแƒ˜ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜, nginx แƒแƒฎแƒšแƒ แƒฎแƒฃแƒ แƒแƒ•แƒก แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒจแƒ”แƒœแƒแƒฎแƒฃแƒš แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒก, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒกแƒแƒช, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ แƒกแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ“แƒแƒฎแƒฃแƒ แƒ•แƒแƒก (โ€žแƒ’แƒ แƒซแƒ”แƒšแƒ•แƒแƒ“แƒ˜แƒแƒœแƒ˜ แƒ“แƒแƒฎแƒฃแƒ แƒ•แƒโ€œ).
  • แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ“แƒ˜ HTTP/2-แƒจแƒ˜ แƒแƒฎแƒšแƒแƒกแƒแƒ HTTP/1.x แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒแƒกแƒ—แƒแƒœ. แƒ˜แƒœแƒ“แƒ˜แƒ•แƒ˜แƒ“แƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ "http2_recv_timeout", "http2_idle_timeout" แƒ“แƒ "http2_max_requests" แƒจแƒ”แƒฌแƒงแƒ“แƒ แƒ–แƒแƒ’แƒแƒ“แƒ˜ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒ˜แƒ•แƒ”แƒ‘แƒ˜แƒก "keepalive_timeout" แƒ“แƒ "keepalive_requests" แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ“.
  • แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ "http2_max_field_size" แƒ“แƒ "http2_max_header_size" แƒฌแƒแƒ˜แƒจแƒแƒšแƒ แƒ“แƒ แƒ›แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ "large_client_header_buffers".

แƒแƒ›แƒแƒ•แƒ” แƒ“แƒ แƒแƒก, แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒ“แƒ njs 0.5.1, JavaScript แƒ—แƒแƒ แƒฏแƒ˜แƒ›แƒแƒœแƒ˜ nginx แƒ•แƒ”แƒ‘ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. njs แƒ—แƒแƒ แƒฏแƒ˜แƒ›แƒแƒœแƒ˜ แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒก ECMAScript แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ”แƒ‘แƒก แƒ“แƒ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ’แƒแƒแƒคแƒแƒ แƒ—แƒแƒ•แƒแƒ— nginx-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ, แƒ“แƒแƒแƒ›แƒฃแƒจแƒแƒ•แƒแƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒจแƒ˜, แƒ แƒแƒ—แƒ แƒ’แƒแƒœแƒ˜แƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒก แƒ›แƒแƒฌแƒ˜แƒœแƒแƒ•แƒ” แƒšแƒแƒ’แƒ˜แƒ™แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒ“แƒ˜แƒœแƒแƒ›แƒ˜แƒฃแƒ แƒแƒ“ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก/แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒจแƒ”แƒกแƒแƒชแƒ•แƒšแƒ”แƒšแƒแƒ“ แƒแƒœ แƒ•แƒ”แƒ‘ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒจแƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒญแƒ แƒ”แƒšแƒแƒ“ แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“.

แƒแƒฎแƒแƒš แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒก แƒ“แƒแƒ”แƒ›แƒแƒขแƒ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒ˜แƒ•แƒ โ€œjs_header_filterโ€, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ“แƒแƒแƒงแƒ”แƒœแƒแƒ— JavaScript แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ—แƒ•แƒ˜แƒ—แƒœแƒ”แƒ‘แƒฃแƒ แƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ—แƒแƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒคแƒ˜แƒšแƒขแƒ แƒแƒชแƒ˜แƒ˜แƒกแƒ แƒ“แƒ แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก: js_import foo.js; แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒ / { js_header_filter foo.filter; proxy_pass http://127.0.0.1:8081/; } foo.js: แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ filter(r) { var cookies = r.headersOut['Set-Cookie']; แƒ•แƒแƒ  แƒšแƒ”แƒœ = แƒ .แƒแƒ แƒ’แƒก.แƒšแƒ”แƒœ ? แƒœแƒแƒ›แƒ”แƒ แƒ˜(r.args.len) : 0; r.headersOut['Set-Cookie'] = cookies.filter(v=>v.length > len); } แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒ”แƒฅแƒกแƒžแƒแƒ แƒขแƒ˜ {แƒคแƒ˜แƒšแƒขแƒ แƒ˜};

แƒแƒกแƒ”แƒ•แƒ” แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ ngx.fetch() แƒ›แƒ”แƒ—แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒก Fetch API-แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก HTTP แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒแƒก. แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก แƒกแƒฎแƒ”แƒฃแƒšแƒ˜แƒก, แƒกแƒแƒ—แƒแƒฃแƒ แƒ”แƒ‘แƒ˜แƒก, แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ˜ แƒ–แƒแƒ›แƒ˜แƒก แƒ“แƒ max_response_body_size แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒแƒก. แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ Response แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), แƒขแƒ˜แƒžแƒ˜แƒก แƒ“แƒ url แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒก, แƒฎแƒแƒšแƒ Header แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก get(), getAll() แƒ“แƒ has() แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜. แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ fetch(r) { ngx.fetch('http://nginx.org/') .then(reply => reply.text()) .then(body => r.return(200, body)) .catch (e => r.return(501, e.message)); }

แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒแƒฆแƒ˜แƒœแƒ˜แƒจแƒœแƒแƒก NGINX Unit 1.22 แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ— แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒแƒก แƒ•แƒ”แƒ‘ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒœแƒแƒ–แƒ” (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js แƒ“แƒ Java). NGINX Unit-แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“ แƒ’แƒแƒฃแƒจแƒ•แƒแƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒœแƒแƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒแƒก แƒ“แƒ˜แƒœแƒแƒ›แƒ˜แƒฃแƒ แƒแƒ“ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. แƒ™แƒแƒ“แƒ˜ แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ C-แƒจแƒ˜ แƒ“แƒ แƒœแƒแƒฌแƒ˜แƒšแƒ“แƒ”แƒ‘แƒ Apache 2.0 แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ˜แƒ—.

NGINX Unit-แƒ˜แƒก แƒแƒฎแƒแƒšแƒ˜ แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒแƒ แƒ˜แƒ”แƒœแƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒขแƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒแƒ‘แƒ˜แƒก แƒ’แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒแƒ–แƒ”, แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒแƒ–แƒ” แƒ“แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒแƒ–แƒ”. Linux-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒจแƒ˜ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ“แƒ แƒฏแƒ’แƒฃแƒคแƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—แƒแƒช แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก NGINX Unit. แƒแƒ แƒแƒ•แƒ˜แƒœ:แƒแƒ แƒแƒ•แƒ˜แƒœแƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“, แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ˜ แƒแƒฎแƒšแƒ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”แƒแƒ‘แƒก แƒ˜แƒœแƒ“แƒ˜แƒ•แƒ˜แƒ“แƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒ˜แƒก แƒฅแƒ•แƒ”แƒจ แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒฏแƒ’แƒฃแƒคแƒจแƒ˜. แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒšแƒ˜แƒ Node.js แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒ“แƒแƒœ ServerRequest แƒ“แƒ ServerResponse แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก Stream API-แƒ—แƒแƒœ แƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“แƒแƒ‘แƒ. Python แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก "แƒ’แƒ–แƒ" แƒแƒคแƒชแƒ˜แƒ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ— แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ.

แƒฌแƒงแƒแƒ แƒ: opennet.ru

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ