Муҳоҷират аз Nginx ба Envoy Proxy

Салом, Хабр! Ман тарҷумаи ин мақоларо ба диққати шумо мерасонам: Муҳоҷират аз Nginx ба Envoy Proxy.

Envoy як прокси-сервери тақсимшудаи баландсифат аст (дар C++ навишта шудааст), ки барои хидматҳо ва замимаҳои инфиродӣ тарҳрезӣ шудааст, инчунин як автобуси иртиботӣ ва “ҳавопаймои маълумоти универсалӣ” аст, ки барои меъмории бузурги микросервиси “mesh” тарҳрезӣ шудааст. Ҳангоми эҷоди он, ҳалли мушкилоте, ки ҳангоми таҳияи серверҳо ба монанди NGINX, HAProxy, тавозуни сарбории сахтафзор ва балансаторҳои сарбории абр ба миён омадаанд, ба назар гирифта шуданд. Envoy дар паҳлӯи ҳар як барнома кор мекунад ва шабакаро реферат мекунад, то новобаста аз платформа функсияҳои умумиро таъмин кунад. Вақте ки тамоми трафики хидматрасонӣ дар инфрасохтор тавассути шабакаи Envoy ҷараён мегирад, тасаввур кардани минтақаҳои мушкилот бо мушоҳидаи пайваста, танзими иҷрои умумӣ ва илова кардани функсияҳои асосӣ дар макони мушаххас осон мешавад.

Хусусиятҳои

  • Архитектураи берун аз раванд: envoy як сервери мустақил ва сермахсул аст, ки миқдори ками RAM-ро мегирад. Он дар якҷоягӣ бо ҳама гуна забон ё чаҳорчӯбаи барнома кор мекунад.
  • Дастгирии http/2 ва grpc: фиристодаи дараҷаи аввал http/2 ва grpc барои пайвастҳои воридотӣ ва содиротӣ дорад. Ин прокси шаффоф аз http/1.1 то http/2 аст.
  • Мувозинати пешрафтаи сарборӣ: фиристодашуда хусусиятҳои пешрафтаи мувозинати сарборӣ, аз ҷумла кӯшишҳои автоматӣ, шикастани занҷир, маҳдудкунии суръати глобалӣ, соя кардани дархост, мувозинати сарбории минтақаи маҳаллӣ ва ғайраҳоро дастгирӣ мекунад.
  • API-и идоракунии конфигуратсия: фиристодашуда API-и мустаҳкамро барои идоракунии динамикӣ танзимоти шумо таъмин мекунад.
  • Мушоҳидашаванда: Мушоҳидаи амиқи трафики L7, дастгирии маҳаллӣ барои пайгирии тақсимшуда ва мушоҳидаи mongodb, dynamodb ва бисёр барномаҳои дигар.

Қадами 1 — Намунаи NGINX Config

Ин скрипт файли махсус таҳияшударо истифода мебарад nginx.conf, дар асоси мисоли пурра аз NGINX Wiki. Шумо метавонед конфигуратсияро дар муҳаррир тавассути кушодан дидан кунед nginx.conf

конфигуратсияи манбаи nginx

user  www www;
pid /var/run/nginx.pid;
worker_processes  2;

events {
  worker_connections   2000;
}

http {
  gzip on;
  gzip_min_length  1100;
  gzip_buffers     4 8k;
  gzip_types       text/plain;

  log_format main      '$remote_addr - $remote_user [$time_local]  '
    '"$request" $status $bytes_sent '
    '"$http_referer" "$http_user_agent" '
    '"$gzip_ratio"';

  log_format download  '$remote_addr - $remote_user [$time_local]  '
    '"$request" $status $bytes_sent '
    '"$http_referer" "$http_user_agent" '
    '"$http_range" "$sent_http_content_range"';

  upstream targetCluster {
    172.18.0.3:80;
    172.18.0.4:80;
  }

  server {
    listen        8080;
    server_name   one.example.com  www.one.example.com;

    access_log   /var/log/nginx.access_log  main;
    error_log  /var/log/nginx.error_log  info;

    location / {
      proxy_pass         http://targetCluster/;
      proxy_redirect     off;

      proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
    }
  }
}

Конфигуратсияҳои NGINX одатан се унсури асосӣ доранд:

  1. Танзими сервери NGINX, сохтори сабт ва функсияи Gzip. Ин дар ҳама ҳолатҳо дар сатҳи ҷаҳонӣ муайян карда мешавад.
  2. Танзими NGINX барои қабули дархостҳо ба мизбон one.example.com дар порти 8080.
  3. Муқаррар кардани макони ҳадаф, чӣ гуна идора кардани трафик барои қисмҳои гуногуни URL.

На ҳама конфигуратсияҳо ба Envoy Proxy татбиқ мешаванд ва ба шумо лозим нест, ки баъзе танзимотҳоро танзим кунед. Фиристодаи прокси дорад чор намуди асосӣ, ки инфрасохтори асосии аз ҷониби NGINX пешниҳодшударо дастгирӣ мекунанд. Асос ин аст:

  • Шунавандагон: Онҳо муайян мекунанд, ки чӣ тавр Envoy Proxy дархостҳои воридшударо қабул мекунад. Envoy Proxy дар айни замон танҳо шунавандагони TCP-ро дастгирӣ мекунад. Пас аз барқарор кардани пайвастшавӣ, он ба маҷмӯи филтрҳо барои коркард интиқол дода мешавад.
  • Филтрҳо: Онҳо як қисми меъмории қубур мебошанд, ки метавонанд маълумоти воридотӣ ва баромадро коркард кунанд. Ин функсия дорои филтрҳо ба монанди Gzip мебошад, ки маълумотро пеш аз фиристодан ба муштарӣ фишурда мекунад.
  • Роутерҳо: Онҳо трафикро ба ҷои таъиноти зарурӣ, ки ҳамчун кластер муайян шудааст, интиқол медиҳанд.
  • Кластерҳо: Онҳо нуқтаи ниҳоии трафик ва параметрҳои конфигуратсияро муайян мекунанд.

Мо ин чаҳор ҷузъро барои сохтани конфигуратсияи Envoy Proxy барои мувофиқат бо конфигуратсияи мушаххаси NGINX истифода хоҳем кард. Ҳадафи фиристодашуда кор бо API ва конфигуратсияи динамикӣ мебошад. Дар ин ҳолат, конфигуратсияи асосӣ танзимоти статикӣ ва сахт-рамзи NGINX-ро истифода мебарад.

Қадами 2 - Танзимоти NGINX

Қисми якум nginx.conf баъзе ҷузъҳои дохилии NGINX-ро, ки бояд танзим карда шаванд, муайян мекунад.

Пайвастҳои коргарон

Конфигуратсияи зер шумораи равандҳо ва пайвастҳои коргариро муайян мекунад. Ин нишон медиҳад, ки NGINX барои қонеъ кардани талабот чӣ гуна миқёс хоҳад дошт.

worker_processes  2;

events {
  worker_connections   2000;
}

Envoy Proxy равандҳои корӣ ва пайвастҳоро бо роҳҳои гуногун идора мекунад.

Envoy барои ҳар як риштаи сахтафзор дар система як риштаи коргариро эҷод мекунад. Ҳар як риштаи коргар як ҳалқаи ҳодисаи бастанашавандаро иҷро мекунад, ки барои он масъул аст

  1. Гӯш кардани ҳар як шунаванда
  2. Қабули пайвастҳои нав
  3. Эҷоди маҷмӯи филтрҳо барои пайвастшавӣ
  4. Дар давоми тамоми умри пайвастшавӣ ҳама амалиётҳои воридот ва баромадро коркард кунед.

Ҳама коркарди минбаъдаи пайвастшавӣ пурра дар риштаи коргарӣ, аз ҷумла ҳама гуна рафтори интиқолӣ иҷро карда мешавад.

Барои ҳар як риштаи коргар дар Envoy, пайвастшавӣ дар ҳавз мавҷуд аст. Ҳамин тавр, ҳавзҳои пайвасти HTTP/2 дар як вақт танҳо як пайвастшавӣ ба як ҳости беруна муқаррар мекунанд, агар чаҳор риштаи корӣ вуҷуд дошта бошанд, чор пайвасти HTTP/2 барои як ҳости беруна дар ҳолати устувор хоҳад буд. Бо нигоҳ доштани ҳама чиз дар як риштаи коргарӣ, қариб ҳама кодҳоро метавон бидуни блок навиштан мумкин аст, гӯё он як ришта бошад. Агар миқдори зиёди риштаҳои корӣ аз зарурат ҷудо карда шаванд, ин метавонад боиси талафи хотира, эҷоди шумораи зиёди пайвастҳои бекор ва кам шудани шумораи баргардонидани пайвастҳо ба ҳавз гардад.

Барои маълумоти иловагӣ, дидан кунед Блоги Envoy Proxy.

Танзимоти HTTP

Блоки конфигуратсияи зерини NGINX танзимоти HTTP-ро муайян мекунад, ба монанди:

  • Кадом намудҳои mime дастгирӣ карда мешаванд
  • Вақтҳои пешфарз
  • Танзимоти Gzip

Шумо метавонед ин ҷанбаҳоро бо истифода аз филтрҳо дар Envoy Proxy танзим кунед, ки мо баъдтар муҳокима хоҳем кард.

Қадами 3 - Танзимоти сервер

Дар блоки конфигуратсияи HTTP, конфигуратсияи NGINX барои гӯш кардани порти 8080 ва посух додан ба дархостҳои воридотӣ барои доменҳо муайян мекунад. one.example.com и www.one.example.com.

 server {
    listen        8080;
    server_name   one.example.com  www.one.example.com;

Дар дохили Envoy, он аз ҷониби Шунавандагон назорат карда мешавад.

Фиристодагон шунавандагон

Ҷанбаи муҳимтарини оғоз бо Envoy Proxy ин муайян кардани шунавандагони шумост. Шумо бояд файли конфигуратсияеро эҷод кунед, ки чӣ тавр шумо мехоҳед намунаи Envoy-ро иҷро кунед, тасвир мекунад.

Парчами дар поён овардашуда шунавандаи нав эҷод мекунад ва онро ба порти 8080 мепайвандад. Конфигуратсия ба Envoy Proxy мегӯяд, ки барои дархостҳои воридотӣ бояд ба кадом портҳо пайваст шавад.

Envoy Proxy барои конфигуратсияи худ нишонаи YAML-ро истифода мебарад. Барои муқаддима ба ин қайд, ба ин ҷо нигаред Садо Ояндасоз.

Copy to Editorstatic_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 8080 }

Муайян кардан лозим нест номи_ сервер, зеро филтрҳои Envoy Proxy инро ҳал мекунанд.

Қадами 4 - Танзимоти ҷойгиршавӣ

Вақте ки дархост ба NGINX ворид мешавад, блоки ҷойгиршавӣ муайян мекунад, ки чӣ гуна коркард ва дар куҷо масири ҳаракати трафик. Дар порчаи зерин, тамоми трафик ба сайт ба кластери боло интиқол дода мешавад (қадди тарҷумон: болооб одатан сервери барнома аст) бо номи targetCluster. Кластери болоӣ гиреҳҳоеро муайян мекунад, ки бояд дархостро коркард кунанд. Мо инро дар қадами оянда муҳокима хоҳем кард.

location / {
    proxy_pass         http://targetCluster/;
    proxy_redirect     off;

    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
}

Дар Envoy, Филтрҳо ин корро мекунанд.

Филтрҳои фиристодашуда

Барои конфигуратсияи статикӣ, филтрҳо муайян мекунанд, ки чӣ тавр коркарди дархостҳои воридотӣ. Дар ин ҳолат мо филтрҳои мувофиқро муқаррар мекунем сервер_номҳо дар қадами қаблӣ. Вақте ки дархостҳои воридотӣ ба доменҳо ва масирҳои муайян мувофиқ меоянд, трафик ба кластер равона карда мешавад. Ин муодили конфигуратсияи NGINX аз поён ба боло аст.

Copy to Editor    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        config:
          codec_type: auto
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: backend
              domains:
                - "one.example.com"
                - "www.one.example.com"
              routes:
              - match:
                  prefix: "/"
                route:
                  cluster: targetCluster
          http_filters:
          - name: envoy.router

ном envoy.http_connection_manager филтри дарунсохт дар Envoy Proxy мебошад. Дигар филтрҳо дохил мешаванд Redis, mongo, TCP. Рӯйхати пурраро метавонед дар ин ҷо пайдо кунед хуччатхо.

Барои маълумоти бештар дар бораи дигар сиёсатҳои мувозинати сарборӣ, боздид кунед Ҳуҷҷатҳои фиристодашуда.

Қадами 5 - Конфигуратсияи прокси ва болооб

Дар NGINX конфигуратсияи болоӣ маҷмӯи серверҳои мавриди ҳадафро муайян мекунад, ки трафикро коркард мекунанд. Дар ин ҳолат, ду кластер таъин карда шуд.

  upstream targetCluster {
    172.18.0.3:80;
    172.18.0.4:80;
  }

Дар Envoy, ин аз ҷониби кластерҳо идора карда мешавад.

Кластерҳои фиристодашуда

Эквиваленти болооб ҳамчун кластерҳо муайян карда мешавад. Дар ин ҳолат, мизбонҳое, ки ба трафик хидмат мекунанд, муайян карда шуданд. Тарзи дастрасӣ ба ҳостҳо, ба монанди вақтҳои вақт, ҳамчун конфигуратсияи кластер муайян карда мешавад. Ин имкон медиҳад, ки назорати бештари ҷанбаҳо ба монанди таъхир ва мувозинати сарборӣ дошта бошад.

Copy to Editor  clusters:
  - name: targetCluster
    connect_timeout: 0.25s
    type: STRICT_DNS
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    hosts: [
      { socket_address: { address: 172.18.0.3, port_value: 80 }},
      { socket_address: { address: 172.18.0.4, port_value: 80 }}
    ]

Ҳангоми истифодаи кашфи хидмат STRICT_DNS Фиристода ҳадафҳои муайяншудаи DNS-ро пайваста ва асинхронӣ ҳал мекунад. Ҳар як суроғаи IP-и баргардонидашуда аз натиҷаи DNS дар кластери болоӣ ҳости равшан ҳисобида мешавад. Ин маънои онро дорад, ки агар дархост ду суроғаи IP-ро баргардонад, Фиристода тахмин мекунад, ки дар кластер ду ҳост мавҷуд аст ва ҳардуи онҳо бояд мутавозин бошанд. Агар мизбон аз натиҷа хориҷ карда шавад, Envoy фарз мекунад, ки он дигар вуҷуд надорад ва трафикро аз ҳама ҳавзҳои пайвасти мавҷуда ҷалб мекунад.

Для получения дополнительной маълумоти см. Ҳуҷҷатҳои прокси фиристодашуда.

Қадами 6 - Воридшавӣ ва хатогиҳо

Конфигуратсияи ниҳоӣ бақайдгирӣ мебошад. Ба ҷои он ки гузоришҳои хатогиҳоро ба диск тела диҳад, Envoy Proxy равиши ба абр асосёфтаро мегирад. Ҳама гузоришҳои барномаҳо ба истодагарӣ и стдерр.

Вақте ки корбарон дархост мекунанд, гузоришҳои дастрасӣ ихтиёрӣ мебошанд ва ба таври нобаёнӣ ғайрифаъол мешаванд. Барои фаъол кардани сабтҳои дастрасӣ барои дархостҳои HTTP, конфигуратсияро фаъол созед access_log барои мудири пайвасти HTTP. Роҳ метавонад ё дастгоҳ бошад, ба монанди истодагарӣ, ё файл дар диск, вобаста ба талаботи шумо.

Конфигуратсияи зерин ҳамаи гузоришҳои дастрасиро ба он равона мекунад истодагарӣ (кадди тарҷумон - stdout барои истифодаи фиристодан дар дохили докер лозим аст. Агар бе докер истифода шавад, пас /dev/stdout -ро бо роҳи файли сабти муқаррарӣ иваз кунед). Порчаро ба бахши конфигуратсия барои мудири пайвастшавӣ нусхабардорӣ кунед:

Copy to Clipboardaccess_log:
- name: envoy.file_access_log
  config:
    path: "/dev/stdout"

Натиҷаҳо бояд чунин бошанд:

      - name: envoy.http_connection_manager
        config:
          codec_type: auto
          stat_prefix: ingress_http
          access_log:
          - name: envoy.file_access_log
            config:
              path: "/dev/stdout"
          route_config:

Бо нобаёнӣ, Envoy дорои сатри форматест, ки тафсилоти дархости HTTP-ро дар бар мегирад:

[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%" %RESPONSE_CODE% %RESPONSE_FLAGS% %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%" "%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%"n

Натиҷаи ин сатри формат ин аст:

[2018-11-23T04:51:00.281Z] "GET / HTTP/1.1" 200 - 0 58 4 1 "-" "curl/7.47.0" "f21ebd42-6770-4aa5-88d4-e56118165a7d" "one.example.com" "172.18.0.4:80"

Мазмуни баромадро тавассути танзими майдони формат кардан мумкин аст. Барои намуна:

access_log:
- name: envoy.file_access_log
  config:
    path: "/dev/stdout"
    format: "[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%" %RESPONSE_CODE% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%"n"

Хати сабт инчунин метавонад дар формати JSON бо гузоштани майдон бароварда шавад json_format. Масалан:

access_log:
- name: envoy.file_access_log
  config:
    path: "/dev/stdout"
    json_format: {"protocol": "%PROTOCOL%", "duration": "%DURATION%", "request_method": "%REQ(:METHOD)%"}

Барои гирифтани маълумоти бештар дар бораи методологияи бақайдгирии фиристодашуда, боздид кунед

https://www.envoyproxy.io/docs/envoy/latest/configuration/access_log#config-access-log-format-dictionaries

Гузариш ягона роҳи ба даст овардани фаҳмиш дар бораи кор бо Envoy Proxy нест. Он дорои қобилиятҳои пешрафтаи пайгирӣ ва метрикӣ, ки дар он сохта шудааст. Шумо метавонед маълумоти бештарро дар ҳуҷҷатҳои пайгирӣ ё тавассути Скрипти пайгирии интерактивӣ.

Қадами 7 - Оғози кор

Шумо ҳоло конфигуратсияи худро аз NGINX ба Envoy Proxy интиқол додед. Қадами охирин ин оғоз кардани намунаи Envoy Proxy барои санҷиши он мебошад.

Ҳамчун корбар иҷро кунед

Дар болои хати конфигуратсияи NGINX корбар www www; муайян мекунад, ки NGINX-ро ҳамчун корбари камимтиёз барои беҳтар кардани амният иҷро кунад.

Envoy Proxy барои идора кардани раванд, ки ба кӣ тааллуқ дорад, равиши ба абр асосёфтаро мегирад. Вақте ки мо Envoy Proxy-ро тавассути контейнер иҷро мекунем, мо метавонем корбари имтиёзноки пастро муайян кунем.

Оғози Proxy Envoy

Фармони зер Envoy Proxy-ро тавассути контейнери Docker дар ҳост иҷро мекунад. Ин фармон ба Envoy имкон медиҳад, ки дархостҳои воридотӣ дар бандари 80-ро гӯш кунад. Аммо, тавре ки дар конфигуратсияи шунаванда нишон дода шудааст, Envoy Proxy трафики воридотӣ дар бандари 8080-ро мешунавад. Ин имкон медиҳад, ки раванд ҳамчун корбари дорои имтиёзҳои паст кор кунад.

docker run --name proxy1 -p 80:8080 --user 1000:1000 -v /root/envoy.yaml:/etc/envoy/envoy.yaml envoyproxy/envoy

санҷиши

Ҳангоми кор кардани прокси, ҳоло санҷишҳоро метавон анҷом дод ва коркард кард. Фармони зерини cURL дархостро бо сарлавҳаи ҳост, ки дар конфигуратсияи прокси муайян шудааст, медиҳад.

curl -H "Host: one.example.com" localhost -i

Дархости HTTP ба хатогӣ оварда мерасонад 503. Сабаб он аст, ки пайвастҳои болооб кор намекунанд ва дастрас нестанд. Аз ин рӯ, Envoy Proxy барои дархост ягон макони дастрас надорад. Фармони зерин як қатор хидматҳои HTTP-ро оғоз мекунад, ки ба конфигуратсияи барои Envoy муайяншуда мувофиқат мекунанд.

docker run -d katacoda/docker-http-server; docker run -d katacoda/docker-http-server;

Бо хидматҳои дастрас, Envoy метавонад трафикро бомуваффақият ба таъиноти худ прокси кунад.

curl -H "Host: one.example.com" localhost -i

Шумо бояд посухеро бинед, ки дар он кадом контейнери Docker дархостро коркард кардааст. Дар гузоришҳои Envoy Proxy шумо инчунин бояд баромади сатри дастрасиро бинед.

Сарлавҳаҳои иловагии посухи HTTP

Шумо дар сарлавҳаҳои посухи дархости воқеӣ сарлавҳаҳои HTTP-ро хоҳед дид. Сарлавҳа вақтеро, ки мизбони болооб барои коркарди дархост сарф кардааст, нишон медиҳад. Бо миллисонияҳо ифода карда мешавад. Ин муфид аст, агар муштарӣ мехоҳад вақти хидматро дар муқоиса бо таъхири шабака муайян кунад.

x-envoy-upstream-service-time: 0
server: envoy

Танзимоти ниҳоӣ

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 8080 }
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        config:
          codec_type: auto
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: backend
              domains:
                - "one.example.com"
                - "www.one.example.com"
              routes:
              - match:
                  prefix: "/"
                route:
                  cluster: targetCluster
          http_filters:
          - name: envoy.router
          clusters:
  - name: targetCluster
    connect_timeout: 0.25s
    type: STRICT_DNS
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    hosts: [
      { socket_address: { address: 172.18.0.3, port_value: 80 }},
      { socket_address: { address: 172.18.0.4, port_value: 80 }}
    ]

admin:
  access_log_path: /tmp/admin_access.log
  address:
    socket_address: { address: 0.0.0.0, port_value: 9090 }

Маълумоти иловагӣ аз тарҷумон

Дастурҳоро оид ба насб кардани Envoy Proxy дар вебсайт пайдо кардан мумкин аст https://www.getenvoy.io/

Бо нобаёнӣ, rpm конфигуратсияи хидмати системавӣ надорад.

Илова кардани конфигуратсияи хидмати systemd /etc/systemd/system/envoy.service:

[Unit]
Description=Envoy Proxy
Documentation=https://www.envoyproxy.io/
After=network-online.target
Requires=envoy-auth-server.service
Wants=nginx.service

[Service]
User=root
Restart=on-failure
ExecStart=/usr/bin/envoy --config-path /etc/envoy/config.yaml
[Install]
WantedBy=multi-user.target

Шумо бояд директорияи /etc/envoy/ эҷод кунед ва config.yaml-ро дар он ҷо гузоред.

Бо истифода аз прокси фиристодаи як сӯҳбати телеграмма мавҷуд аст: https://t.me/envoyproxy_ru

Envoy Proxy хидматрасонии мундариҷаи статикиро дастгирӣ намекунад. Аз ин рӯ, кӣ метавонад ба ин хусусият овоз диҳад: https://github.com/envoyproxy/envoy/issues/378

Танҳо корбарони сабтиномшуда метавонанд дар пурсиш иштирок кунанд. даромад, Лутфан.

Оё ин паём шуморо ташвиқ кард, ки прокси-фиристодаро насб ва озмоиш кунед?

  • ҳа

  • нест

75 корбар овоз доданд. 18 корбар худдорӣ карданд.

Манбаъ: will.com

Илова Эзоҳ