Nginx рд╕реЗ рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг

рдирдорд╕реНрддреЗ, рд╣рдмрд░! рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд▓рд╛рддрд╛ рд╣реВрдВ: Nginx рд╕реЗ рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг.

рдПрдиреНрд╡реЙрдп рдПрдХ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рддрд░рд┐рдд рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ (C++ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реБрдЖ) рд╣реИ рдЬрд┐рд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдПрдХ рд╕рдВрдЪрд╛рд░ рдмрд╕ рдФрд░ "рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдбреЗрдЯрд╛ рдкреНрд▓реЗрди" рднреА рд╣реИ рдЬрд┐рд╕реЗ рдмрдбрд╝реЗ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ "рд╕рд░реНрд╡рд┐рд╕ рдореЗрд╢" рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╕рдордп, NGINX, HAProxy, рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░реНрд╕ рдФрд░ рдХреНрд▓рд╛рдЙрдб рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░реНрд╕ рдЬреИрд╕реЗ рд╕рд░реНрд╡рд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ред рджреВрдд рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдЕрдореВрд░реНрдд рдХрд░рддрд╛ рд╣реИред рдЬрдм рдХрд┐рд╕реА рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдореЗрдВ рд╕рднреА рд╕реЗрд╡рд╛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдПрдиреНрд╡реЙрдп рдЬрд╛рд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд▓рдЧрд╛рддрд╛рд░ рдЕрд╡рд▓реЛрдХрди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛, рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЯреНрдпреВрди рдХрд░рдирд╛ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдореЗрдВ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрд╖рдорддрд╛рдУрдВ

  • рдЖрдЙрдЯ-рдСрдл-рдкреНрд░реЛрд╕реЗрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░: рджреВрдд рдПрдХ рд╕реНрд╡-рдирд┐рд╣рд┐рдд, рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рд╕рд░реНрд╡рд░ рд╣реИ рдЬреЛ рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд░реИрдо рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рднрд╛рд╖рд╛ рдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  • http/2 рдФрд░ GRPC рд╕рдорд░реНрдерди: рджреВрдд рдХреЗ рдкрд╛рд╕ рдЗрдирдХрдорд┐рдВрдЧ рдФрд░ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рдердо рд╢реНрд░реЗрдгреА http/2 рдФрд░ GRPC рд╕рдорд░реНрдерди рд╣реИред рдпрд╣ http/1.1 рд╕реЗ http/2 рддрдХ рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА рдкреНрд░реЙрдХреНрд╕реА рд╣реИред
  • рдЙрдиреНрдирдд рд▓реЛрдб рд╕рдВрддреБрд▓рди: рджреВрдд рдЙрдиреНрдирдд рд▓реЛрдб рд╕рдВрддреБрд▓рди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░рд┐рдЯреНрд░реАрдЯ, рдЪреЗрди рдмреНрд░реЗрдХрд┐рдВрдЧ, рд╡реИрд╢реНрд╡рд┐рдХ рджрд░ рд╕реАрдорд┐рдд рдХрд░рдирд╛, рдЕрдиреБрд░реЛрдз рд╢реИрдбреЛрдЗрдВрдЧ, рд╕реНрдерд╛рдиреАрдп рдХреНрд╖реЗрддреНрд░ рд▓реЛрдб рд╕рдВрддреБрд▓рди рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
  • рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдмрдВрдзрди рдПрдкреАрдЖрдИ: рджреВрдд рдЖрдкрдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
  • рдЕрд╡рд▓реЛрдХрдирд╢реАрд▓рддрд╛: L7 рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреА рдЧрд╣рди рдЕрд╡рд▓реЛрдХрдирд╢реАрд▓рддрд╛, рд╡рд┐рддрд░рд┐рдд рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╕рдорд░реНрдерди рдФрд░ рдореЛрдВрдЧреЛрдбрдм, рдбрд╛рдпрдирд╛рдореЛрдбрдм рдФрд░ рдХрдИ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдЕрд╡рд▓реЛрдХрдирд╢реАрд▓рддрд╛ред

рдЪрд░рдг 1 - рдЙрджрд╛рд╣рд░рдг рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ nginx.conf, рд╕реЗ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рд╡рд┐рдХреА. рдЖрдк рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЦреЛрд▓рдХрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ 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;
    }
  }
}

рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рддреАрди рдкреНрд░рдореБрдЦ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ:

  1. рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рд╕рд░реНрд╡рд░, рд▓реЙрдЧ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдЬреАрдЬрд╝рд┐рдк рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ред рдЗрд╕реЗ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  2. рд╣реЛрд╕реНрдЯ рд╕реЗ рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ one.example.com рдкреЛрд░реНрдЯ 8080 рдкрд░.
  3. рд▓рдХреНрд╖реНрдп рд╕реНрдерд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛, URL рдХреЗ рд╡рд┐рднрд┐рдиреНрди рднрд╛рдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИред

рд╕рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдФрд░ рдЖрдкрдХреЛ рдХреБрдЫ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдкрд╛рд╕ рд╣реИ рдЪрд╛рд░ рдкреНрд░рдореБрдЦ рдкреНрд░рдХрд╛рд░, рдЬреЛ рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдореБрдЦреНрдп рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдореВрд▓ рд╣реИ:

  • рд╢реНрд░реЛрддрд╛рдУрдВ: рд╡реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдЯреАрд╕реАрдкреА-рдЖрдзрд╛рд░рд┐рдд рд╢реНрд░реЛрддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЬрд╛рдиреЗ рдкрд░, рдЗрд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдПрдХ рд╕реЗрдЯ рдореЗрдВ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдлрд┐рд▓реНрдЯрд░: рд╡реЗ рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ рдЬреЛ рдЗрдирдХрдорд┐рдВрдЧ рдФрд░ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ Gzip рдЬреИрд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддрд╛ рд╣реИред
  • рд░рд╛рдЙрдЯрд░: рд╡реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЖрд╡рд╢реНрдпрдХ рдЧрдВрддрд╡реНрдп рддрдХ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
  • рдХреНрд▓рд╕реНрдЯрд░: рд╡реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдЪрд╛рд░ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рджреВрдд рдХрд╛ рд▓рдХреНрд╖реНрдп рдПрдкреАрдЖрдИ рдФрд░ рдЧрддрд┐рд╢реАрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдзрд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рд╕реЗ рд╕реНрдерд┐рд░, рд╣рд╛рд░реНрдб-рдХреЛрдбреЗрдб рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

рдЪрд░рдг 2 - рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рдкрд╣рд▓реЗ рднрд╛рдЧ nginx.conf рдХреБрдЫ рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдЖрдВрддрд░рд┐рдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрдиреЗрдХреНрд╢рди

рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдорд╛рдВрдЧ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░реЗрдЧрд╛ред

worker_processes  2;

events {
  worker_connections   2000;
}

рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред

рдПрдиреНрд╡реЙрдп рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдХрд░ рдереНрд░реЗрдб рдмрдирд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдХрд░ рдереНрд░реЗрдб рдПрдХ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рдИрд╡реЗрдВрдЯ рд▓реВрдк рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ

  1. рдкреНрд░рддреНрдпреЗрдХ рд╢реНрд░реЛрддрд╛ рдХреЛ рд╕реБрдирдирд╛
  2. рдирдП рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛
  3. рдХрд┐рд╕реА рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛рдирд╛
  4. рдХрдиреЗрдХреНрд╢рди рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рджреМрд░рд╛рди рд╕рднреА I/O рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВред

рдЖрдЧреЗ рдХреА рд╕рднреА рдХрдиреЗрдХреНрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдХрд░ рдереНрд░реЗрдб рдореЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рднреА рдЕрдЧреНрд░реЗрд╖рдг рд╡реНрдпрд╡рд╣рд╛рд░ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред

рдПрдиреНрд╡реЙрдп рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдХрд░ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП HTTP/2 рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдПрдХ рд╕рдордп рдореЗрдВ рдкреНрд░рддрд┐ рдмрд╛рд╣рд░реА рд╣реЛрд╕реНрдЯ рдХреЗрд╡рд▓ рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рдЪрд╛рд░ рд╡рд░реНрдХрд░ рдереНрд░реЗрдб рд╣реИрдВ рддреЛ рд╕реНрдерд┐рд░ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рддрд┐ рдмрд╛рд╣рд░реА рд╣реЛрд╕реНрдЯ рдкрд░ рдЪрд╛рд░ HTTP/2 рдХрдиреЗрдХреНрд╢рди рд╣реЛрдВрдЧреЗред рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдПрдХ рд╡рд░реНрдХрд░ рдереНрд░реЗрдб рдореЗрдВ рд░рдЦрдХрд░, рд▓рдЧрднрдЧ рд╕рднреА рдХреЛрдб рдХреЛ рдмрд┐рдирд╛ рдмреНрд▓реЙрдХ рдХрд┐рдП рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╡рд╣ рд╕рд┐рдВрдЧрд▓ рдереНрд░реЗрдб рд╣реЛред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрдХрд░ рдереНрд░реЗрдб рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ рдореЗрдореЛрд░реА рдмрд░реНрдмрд╛рдж рд╣реЛ рд╕рдХрддреА рд╣реИ, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрдиреЗрдХреНрд╢рди рдмрди рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкреВрд▓ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЬреНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдпреЗ рдкрдзрд╛рд░реЗрдВ рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рдмреНрд▓реЙрдЧ.

HTTP рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмреНрд▓реЙрдХ HTTP рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ:

  • рдХреМрди рд╕реЗ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ
  • рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ
  • рдЬреАрдЬрд╝рд┐рдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рдЖрдк рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рдкрд╣рд▓реБрдУрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред

рдЪрд░рдг 3 - рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

HTTP рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмреНрд▓реЙрдХ рдореЗрдВ, NGINX рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреЛрд░реНрдЯ 8080 рдкрд░ рд╕реБрдирдиреЗ рдФрд░ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ one.example.com ╨╕ www.one.example.com.

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

рджреВрдд рдХреЗ рдЕрдВрджрд░, рдЗрд╕реЗ рд╢реНрд░реЛрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рджреВрдд рд╢реНрд░реЛрддрд╛рдУрдВ

рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реВ рдЕрдкрдиреЗ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реИред рдЖрдкрдХреЛ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рдПрдиреНрд╡реЙрдп рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдХреИрд╕реЗ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕реНрдирд┐рдкреЗрдЯ рдПрдХ рдирдпрд╛ рд╢реНрд░реЛрддрд╛ рдмрдирд╛рдПрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдкреЛрд░реНрдЯ 8080 рд╕реЗ рдЬреЛрдбрд╝реЗрдЧрд╛ред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдирд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкреЛрд░реНрдЯ рд╕реЗ рдЬреБрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП YAML рдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрдХреЗрддрди рдХреЗ рдкрд░рд┐рдЪрдп рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ рд▓рд┐рдВрдХ.

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

рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╕рд░реНрд╡рд░ рдХрд╛ рдирд╛рдо, рдЪреВрдВрдХрд┐ рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдлрд╝рд┐рд▓реНрдЯрд░ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд▓реЗрдВрдЧреЗред

рдЪрд░рдг 4 - рд╕реНрдерд╛рди рд╡рд┐рдиреНрдпрд╛рд╕

рдЬрдм рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рд╕реНрдерд╛рди рдмреНрд▓реЙрдХ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдХрд╣рд╛рдВ рд░реВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЦрдВрдб рдореЗрдВ, рд╕рд╛рдЗрдЯ рдкрд░ рд╕рднреА рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдПрдХ рдЕрдкрд╕реНрдЯреНрд░реАрдо (рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ: рдЕрдкрд╕реНрдЯреНрд░реАрдо рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рд╣реИ) рдирд╛рдордХ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓рдХреНрд╖реНрдпрдХреНрд▓рд╕реНрдЯрд░. рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреНрд▓рд╕реНрдЯрд░ рдЙрди рдиреЛрдбреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкрд░ рд╣рдо рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ.

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

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

рдПрдиреНрд╡реЙрдп рдореЗрдВ, рдлрд╝рд┐рд▓реНрдЯрд░ рдпрд╣ рдХрд░рддрд╛ рд╣реИред

рджреВрдд рдлрд╝рд┐рд▓реНрдЯрд░

рд╕реНрдерд┐рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рдлрд╝рд┐рд▓реНрдЯрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рд╕рд░реНрд╡рд░_рдирд╛рдо рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ. рдЬрдм рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рдЖрддреЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рдбреЛрдореЗрди рдФрд░ рдорд╛рд░реНрдЧреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд░реВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдмреЙрдЯрдо-рдЕрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рдорддреБрд▓реНрдп рд╣реИред

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

рдирд╛рдо рджреВрдд.http_connection_manager рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рд┐рд▓реНрдЯрд░ рд╣реИред рдЕрдиреНрдп рдлрд╝рд┐рд▓реНрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ Redis, рдореЛрдВрдЧреЛ, рдЯреАрд╕реАрдкреА. рдЖрдк рдкреВрд░реА рд╕реВрдЪреА рдпрд╣рд╛рдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдкреНрд░рд▓реЗрдЦрди.

рдЕрдиреНрдп рд▓реЛрдб рд╕рдВрддреБрд▓рди рдиреАрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ рджреВрдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг.

рдЪрд░рдг 5 - рдкреНрд░реЙрдХреНрд╕реА рдФрд░ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдореЗрдВ, рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рдХреНрд╖реНрдп рд╕рд░реНрд╡рд░ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреЛ рдХреНрд▓рд╕реНрдЯрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЧрдП рдереЗред

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

рдПрдиреНрд╡реЙрдп рдореЗрдВ, рдЗрд╕реЗ рдХреНрд▓рд╕реНрдЯрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рджреВрдд рд╕рдореВрд╣

рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╕рдордХрдХреНрд╖ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реЛрд╕реНрдЯ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд▓реА рдЧрдИ рд╣реИред рд╣реЛрд╕реНрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рддрд░реАрдХрд╛, рдЬреИрд╕реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ, рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд▓рдВрдмрддрд╛ рдФрд░ рд▓реЛрдб рд╕рдВрддреБрд▓рди рдЬреИрд╕реЗ рдкрд╣рд▓реБрдУрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

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 рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ред DNS рдкрд░рд┐рдгрд╛рдо рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рдЖрдИрдкреА рдкрддреЗ рдХреЛ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрд╕реНрдЯ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рдЕрдиреБрд░реЛрдз рджреЛ рдЖрдИрдкреА рдкрддреЗ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рджреВрдд рдпрд╣ рдорд╛рди рд▓реЗрдЧрд╛ рдХрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рджреЛ рд╣реЛрд╕реНрдЯ рд╣реИрдВ, рдФрд░ рджреЛрдиреЛрдВ рдХреЛ рд▓реЛрдб рд╕рдВрддреБрд▓рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдХрд┐рд╕реА рд╣реЛрд╕реНрдЯ рдХреЛ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рджреВрдд рдорд╛рди рд▓реЗрдЧрд╛ рдХрд┐ рдпрд╣ рдЕрдм рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рд╕реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдЦреАрдВрдЪ рд▓реЗрдЧрд╛ред

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг.

рдЪрд░рдг 6 - рд▓реЙрдЧ рдПрдХреНрд╕реЗрд╕ рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдБ

рдЕрдВрддрд┐рдо рд╡рд┐рдиреНрдпрд╛рд╕ рдкрдВрдЬреАрдХрд░рдг рд╣реИ. рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдкрдирд╛рддрд╛ рд╣реИред рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ рд╣реИрдВ stdout ╨╕ stderr.

рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХреНрд╕реЗрд╕ рд▓реЙрдЧ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВред HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рд▓реЙрдЧ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдПрдХреНрд╕реЗрд╕_рд▓реЙрдЧ HTTP рдХрдиреЗрдХреНрд╢рди рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд▓рд┐рдП. рдкрде рдпрд╛ рддреЛ рдХреЛрдИ рдЙрдкрдХрд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ stdout, рдпрд╛ рдбрд┐рд╕реНрдХ рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓, рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рднреА рдПрдХреНрд╕реЗрд╕ рд▓реЙрдЧ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░реЗрдЧрд╛ stdout (рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ - рдбреЙрдХрд░ рдХреЗ рдЕрдВрджрд░ рджреВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 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:

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдПрдиреНрд╡реЙрдп рдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╛рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ 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

рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рдВрдЧ рд╣реА рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдореЗрдВ рдЙрдиреНрдирдд рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдФрд░ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреНрд╖рдорддрд╛рдПрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИрдВред рдЖрдк рдпрд╣рд╛рдВ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЕрдиреБрд░реЗрдЦрдг рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ.

рдЪрд░рдг 7 - рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ

рдЕрдм рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди NGINX рд╕реЗ Envoy Proxy рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЕрдВрддрд┐рдо рдЪрд░рдг рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╣реИред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдПрдБ

NGINX рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЗрди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ www www; рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдХреЛ рдХрдо-рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред

рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдпрд╣ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдкрдирд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕реНрд╡рд╛рдореА рдХреМрди рд╣реИред рдЬрдм рд╣рдо рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдХрдо рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рд╢реБрднрд╛рд░рдВрдн

рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХрдорд╛рдВрдб рд╣реЛрд╕реНрдЯ рдкрд░ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдирд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдЪрд▓рд╛рдПрдЧрд╛ред рдпрд╣ рдХрдорд╛рдВрдб рдПрдиреНрд╡реЙрдп рдХреЛ рдкреЛрд░реНрдЯ 80 рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реБрдирдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рд╢реНрд░реЛрддрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ, рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдкреЛрд░реНрдЯ 8080 рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╕реБрдирддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдо-рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

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

рдкрд░реАрдХреНрд╖рдг

рдкреНрд░реЙрдХреНрд╕реА рдЪрд▓рдиреЗ рдХреЗ рд╕рд╛рде, рдкрд░реАрдХреНрд╖рдг рдЕрдм рдмрдирд╛рдП рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░реНрд▓ рдХрдорд╛рдВрдб рдкреНрд░реЙрдХреНрд╕реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрд╕реНрдЯ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрд░реЛрдз рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИред

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

HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА 503. рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХрдиреЗрдХреНрд╢рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдкрд╛рд╕ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдкрд▓рдмреНрдз рдЧрдВрддрд╡реНрдп рдирд╣реАрдВ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб HTTP рд╕реЗрд╡рд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ рдЬреЛ рдПрдиреНрд╡реЙрдп рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред

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

рдЙрдкрд▓рдмреНрдз рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде, рджреВрдд рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдЙрд╕рдХреЗ рдЧрдВрддрд╡реНрдп рддрдХ рдкреНрд░реЙрдХреНрд╕реА рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рджрд░реНрд╢рд╛рддреА рд╣реИ рдХрд┐ рдХрд┐рд╕ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдиреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рд▓реЙрдЧ рдореЗрдВ рдЖрдкрдХреЛ рдПрдХ рдПрдХреНрд╕реЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ рднреА рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрддрд┐рд░рд┐рдХреНрдд 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 }

рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА

рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ https://www.getenvoy.io/

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЖрд░рдкреАрдПрдо рдореЗрдВ рд╕рд┐рд╕реНрдЯрдордбреА рд╕рд░реНрд╡рд┐рд╕ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдирд╣реАрдВ рд╣реИред

рд╕рд┐рд╕реНрдЯрдордб рд╕реЗрд╡рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЬреЛрдбрд╝реЗрдВ /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

рдПрдиреНрд╡реЙрдп рдкреНрд░реЙрдХреНрд╕реА рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рдкрд░реЛрд╕рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХреМрди рд╡реЛрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: https://github.com/envoyproxy/envoy/issues/378

рдХреЗрд╡рд▓ рдкрдВрдЬреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реА рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рдЗрди рдЗрди рдХрд░реЗрдВрдХреГрдкрдпрд╛ред

рдХреНрдпрд╛ рдЗрд╕ рдкреЛрд╕реНрдЯ рдиреЗ рдЖрдкрдХреЛ рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛?

  • рд╣рд╛рдВ

  • рдирд╣реАрдВ

75 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдорддрджрд╛рди рдХрд┐рдпрд╛ред 18 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд░рд╣реЗред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ