Nginx เจคเฉ‹เจ‚ เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจคเฉฑเจ• เจชเฉเจฐเจตเจพเจธ

เจนเฉˆเจฒเฉ‹, เจนเฉˆเจฌเจฐ! เจฎเฉˆเจ‚ เจคเฉเจนเจพเจกเฉ‡ เจงเจฟเจ†เจจ เจตเจฟเฉฑเจš เจชเฉ‹เจธเจŸ เจฆเจพ เจ…เจจเฉเจตเจพเจฆ เจฒเจฟเจ†เจ‰เจ‚เจฆเจพ เจนเจพเจ‚: Nginx เจคเฉ‹เจ‚ เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจคเฉฑเจ• เจชเฉเจฐเจตเจพเจธ.

เจฆเฉ‚เจค เจ‡เฉฑเจ• เจ‰เฉฑเจš-เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจตเฉฐเจกเจฟเจ† เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจธเจฐเจตเจฐ เจนเฉˆ (C++ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ†) เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจธเฉ‡เจตเจพเจตเจพเจ‚ เจ…เจคเฉ‡ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจ‡เจน เจ‡เฉฑเจ• เจธเฉฐเจšเจพเจฐ เจฌเฉฑเจธ เจ…เจคเฉ‡ "เจฏเฉ‚เจจเฉ€เจตเจฐเจธเจฒ เจกเจพเจŸเจพ เจชเจฒเฉ‡เจจ" เจตเฉ€ เจนเฉˆ เจœเฉ‹ เจตเฉฑเจกเฉ‡ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเจฐเจตเจฟเจธ "เจธเจฐเจตเจฟเจธ เจฎเฉ‡เจธเจผ" เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค เจ‡เจธ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจธเจฎเฉ‡เจ‚, เจธเจฐเจตเจฐเจพเจ‚ เจฆเฉ‡ เจตเจฟเจ•เจพเจธ เจฆเฉ‡ เจฆเฉŒเจฐเจพเจจ เจชเฉˆเจฆเจพ เจนเฉ‹เจˆเจ†เจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจฆเฉ‡ เจนเฉฑเจฒ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ NGINX, HAProxy, เจนเจพเจฐเจกเจตเฉ‡เจ…เจฐ เจฒเฉ‹เจก เจฌเฉˆเจฒเฉˆเจ‚เจธเจฐ เจ…เจคเฉ‡ เจ•เจฒเจพเจ‰เจก เจฒเฉ‹เจก เจฌเฉˆเจฒเฉˆเจ‚เจธเจฐ เจจเฉ‚เฉฐ เจงเจฟเจ†เจจ เจตเจฟเฉฑเจš เจฐเฉฑเจ–เจฟเจ† เจ—เจฟเจ† เจธเฉ€เฅค เจฆเฉ‚เจค เจนเจฐเฉ‡เจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ‡ เจจเจพเจฒ-เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฆเฉ€ เจชเจฐเจตเจพเจน เจ•เฉ€เจคเฉ‡ เจฌเจฟเจจเจพเจ‚ เจธเจพเจ‚เจเฉ€ เจ•เจพเจฐเจœเจ•เฉเจธเจผเจฒเจคเจพ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฒเจˆ เจจเฉˆเจŸเจตเจฐเจ• เจจเฉ‚เฉฐ เจธเฉฐเจ–เฉ‡เจช เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจตเจฟเฉฑเจš เจธเจพเจฐเจพ เจธเฉ‡เจตเจพ เจŸเฉเจฐเฉˆเจซเจฟเจ• เจฆเฉ‚เจค เจœเจพเจฒ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจฒเฉฐเจ˜เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจธเจฎเฉฑเจธเจฟเจ† เจตเจพเจฒเฉ‡ เจ–เฉ‡เจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจจเจฟเจฐเฉฐเจคเจฐ เจจเจฟเจฐเฉ€เจ–เจฃเจฏเฉ‹เจ—เจคเจพ, เจธเจฎเฉเฉฑเจšเฉ€ เจ•เจพเจฐเจ—เฉเจœเจผเจพเจฐเฉ€ เจจเฉ‚เฉฐ เจŸเจฟเจŠเจจ เจ•เจฐเจจเจพ, เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจ–เจพเจธ เจธเจฅเจพเจจ เจตเจฟเฉฑเจš เจฎเฉเฉฑเจ– เจ•เจพเจฐเจœเจธเจผเฉ€เจฒเจคเจพ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ เจ†เจธเจพเจจ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจซเฉ€เจšเจฐ

  • เจ†เจŠเจŸ-เจ†เจซ-เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ: เจฆเฉ‚เจค เจ‡เฉฑเจ• เจธเจตเฉˆ-เจจเจฟเจฐเจญเจฐ, เจ‰เฉฑเจš-เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจตเจพเจฒเจพ เจธเจฐเจตเจฐ เจนเฉˆ เจœเฉ‹ เจฅเฉ‹เฉœเฉเจนเฉ€ เจœเจฟเจนเฉ€ RAM เจฒเฉˆเจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจ•เจฟเจธเฉ‡ เจตเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจญเจพเจธเจผเจพ เจœเจพเจ‚ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจฆเฉ‡ เจจเจพเจฒ เจœเฉ‹เฉœ เจ•เฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆเฅค
  • http/2 เจ…เจคเฉ‡ grpc เจธเจฎเจฐเจฅเจจ: เจฐเจพเจœเจฆเฉ‚เจค เจ•เฉ‹เจฒ เจ†เจ‰เจฃ เจตเจพเจฒเฉ‡ เจ…เจคเฉ‡ เจฌเจพเจนเจฐ เจœเจพเจฃ เจตเจพเจฒเฉ‡ เจ•เฉเจจเฉˆเจ•เจธเจผเจจเจพเจ‚ เจฒเจˆ เจชเจนเจฟเจฒเฉ€-เจธเจผเฉเจฐเฉ‡เจฃเฉ€ http/2 เจ…เจคเฉ‡ grpc เจธเจนเจพเจ‡เจคเจพ เจนเฉˆเฅค เจ‡เจน http/1.1 เจคเฉ‹เจ‚ http/2 เจคเฉฑเจ• เจ‡เฉฑเจ• เจชเจพเจฐเจฆเจฐเจธเจผเฉ€ เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจนเฉˆเฅค
  • เจเจกเจตเจพเจ‚เจธเจก เจฒเฉ‹เจก เจฌเฉˆเจฒเฉ‡เจ‚เจธเจฟเฉฐเจ—: เจฆเฉ‚เจค เจเจกเจตเจพเจ‚เจธ เจฒเฉ‹เจก เจฌเฉˆเจฒเฉ‡เจ‚เจธเจฟเฉฐเจ— เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจฐเฉ€เจŸเฉเจฐเฉ€เจธ, เจšเฉ‡เจจ เจฌเฉเจฐเฉ‡เจ•เจฟเฉฐเจ—, เจ—เจฒเฉ‹เจฌเจฒ เจฐเฉ‡เจŸ เจฒเจฟเจฎเจฟเจŸเจฟเฉฐเจ—, เจฌเฉ‡เจจเจคเฉ€ เจธเจผเฉˆเจกเฉ‹เจ‡เฉฐเจ—, เจฒเฉ‹เจ•เจฒ เจœเจผเฉ‹เจจ เจฒเฉ‹เจก เจฌเฉˆเจฒเฉ‡เจ‚เจธเจฟเฉฐเจ— เจ†เจฆเจฟ เจธเจผเจพเจฎเจฒ เจนเจจเฅค
  • เจธเฉฐเจฐเจšเจจเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ API: เจฆเฉ‚เจค เจคเฉเจนเจพเจกเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจจเฉ‚เฉฐ เจ—เจคเฉ€เจธเจผเฉ€เจฒ เจคเฉŒเจฐ 'เจคเฉ‡ เจชเฉเจฐเจฌเฉฐเจงเจจ เจฒเจˆ เจ‡เฉฑเจ• เจฎเจœเจผเจฌเฉ‚เจค โ€‹โ€‹API เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค
  • เจจเจฟเจฐเฉ€เจ–เจฃเจฏเฉ‹เจ—เจคเจพ: L7 เจŸเฉเจฐเฉˆเจซเจฟเจ• เจฆเฉ€ เจกเฉ‚เฉฐเจ˜เฉ€ เจจเจฟเจฐเฉ€เจ–เจฃเจฏเฉ‹เจ—เจคเจพ, เจกเจฟเจธเจŸเฉเจฐเฉ€เจฌเจฟเจŠเจŸเจฟเจก เจŸเจฐเฉ‡เจธเจฟเฉฐเจ— เจฒเจˆ เจฎเฉ‚เจฒ เจธเจนเจพเจ‡เจคเจพ เจ…เจคเฉ‡ เจฎเฉ‹เจ‚เจ—เฉŒเจกเจฌเฉ€, เจกเจพเจ‡เจจเจพเจฎเฉ‹เจกเจฌเฉ€ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจ•เจˆ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจจเจฟเจฐเฉ€เจ–เจฃเจฏเฉ‹เจ—เจคเจพเฅค

เจ•เจฆเจฎ 1 - เจ‰เจฆเจพเจนเจฐเจจ NGINX เจธเฉฐเจฐเจšเจจเจพ

เจ‡เจน เจธเจ•เฉเจฐเจฟเจชเจŸ เจตเจฟเจธเจผเฉ‡เจธเจผ เจคเฉŒเจฐ 'เจคเฉ‡ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ€ เจซเจพเจˆเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ€ เจนเฉˆ nginx.confเจคเฉ‹เจ‚ เจชเฉ‚เจฐเฉ€ เจ‰เจฆเจพเจนเจฐเจจ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡ NGINX เจตเจฟเจ•เฉ€. เจคเฉเจธเฉ€เจ‚ เจธเฉฐเจชเจพเจฆเจ• เจตเจฟเฉฑเจš เจธเฉฐเจฐเจšเจจเจพ เจจเฉ‚เฉฐ เจ–เฉ‹เจฒเฉเจน เจ•เฉ‡ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹ 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 เจฆเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจนเจฟเฉฑเจธเจฟเจ†เจ‚ เจฒเจˆ เจŸเฉเจฐเฉˆเจซเจฟเจ• เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจธเฉฐเจญเจพเจฒเจฃเจพ เจนเฉˆ.

เจธเจพเจฐเฉ€เจ†เจ‚ เจธเฉฐเจฐเจšเจจเจพเจตเจพเจ‚ เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ 'เจคเฉ‡ เจฒเจพเจ—เฉ‚ เจจเจนเฉ€เจ‚ เจนเฉ‹เจฃเจ—เฉ€เจ†เจ‚, เจ…เจคเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เฉเจ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจ•เฉ‹เจฒ เจนเฉˆ เจšเจพเจฐ เจฎเฉเฉฑเจ– เจ•เจฟเจธเจฎ, เจœเฉ‹ เจ•เจฟ NGINX เจฆเฉเจ†เจฐเจพ เจชเฉ‡เจธเจผ เจ•เฉ€เจคเฉ‡ เจ—เจ เจฎเฉเฉฑเจ– เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจ•เฉ‹เจฐ เจนเฉˆ:

  • เจธเฉเจฃเจจ เจตเจพเจฒเฉ‡: เจ‰เจน เจ‡เจน เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจฆเฉ‡ เจนเจจ เจ•เจฟ เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจ†เจ‰เจฃ เจตเจพเจฒเฉ€เจ†เจ‚ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจธเจตเฉ€เจ•เจพเจฐ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจš เจธเจฟเจฐเจซเจผ TCP-เจ…เจงเจพเจฐเจฟเจค เจธเจฐเฉ‹เจคเจฟเจ†เจ‚ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ‡เฉฑเจ• เจตเจพเจฐ เจ‡เฉฑเจ• เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจธเจฅเจพเจชเจค เจนเฉ‹ เจœเจพเจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ‡เจธเจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจฒเจˆ เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจฆเฉ‡ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจตเจฟเฉฑเจš เจญเฉ‡เจœเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค
  • เจซเจฟเจฒเจŸเจฐ: เจ‰เจน เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจฆเจพ เจนเจฟเฉฑเจธเจพ เจนเจจ เจœเฉ‹ เจ†เจ‰เจฃ เจตเจพเจฒเฉ‡ เจ…เจคเฉ‡ เจฌเจพเจนเจฐ เจœเจพเจฃ เจตเจพเจฒเฉ‡ เจกเฉ‡เจŸเจพ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจเฅค เจ‡เจธ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒเจคเจพ เจตเจฟเฉฑเจš เจซเจฟเจฒเจŸเจฐ เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ Gzip, เจœเฉ‹ เจ•เจฟ เจ—เจพเจนเจ• เจจเฉ‚เฉฐ เจญเฉ‡เจœเจฃ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจธเฉฐเจ•เฉเจšเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆเฅค
  • เจฐเจพเจŠเจŸเจฐ: เจ‰เจน เจŸเฉเจฐเฉˆเจซเจฟเจ• เจจเฉ‚เฉฐ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจฎเฉฐเจœเจผเจฟเจฒ 'เจคเฉ‡ เจญเฉ‡เจœเจฆเฉ‡ เจนเจจ, เจœเจฟเจธ เจจเฉ‚เฉฐ เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจœเฉ‹เจ‚ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค
  • เจ•เจฒเฉฑเจธเจŸเจฐ: เจ‰เจน เจŸเฉเจฐเฉˆเจซเจฟเจ• เจ…เจคเฉ‡ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจฒเจˆ เจ…เฉฐเจคเจฎ เจฌเจฟเฉฐเจฆเฉ‚ เจจเฉ‚เฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐเจฆเฉ‡ เจนเจจเฅค

เจ…เจธเฉ€เจ‚ เจ‡เจนเจจเจพเจ‚ เจšเจพเจฐ เจนเจฟเฉฑเจธเจฟเจ†เจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจ–เจพเจธ NGINX เจธเฉฐเจฐเจšเจจเจพ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค เจฆเฉ‚เจค เจฆเจพ เจŸเฉ€เจšเจพ API เจ…เจคเฉ‡ เจ—เจคเฉ€เจธเจผเฉ€เจฒ เจธเฉฐเจฐเจšเจจเจพ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจนเฉˆเฅค เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจฌเฉ‡เจธ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ NGINX เจคเฉ‹เจ‚ เจธเจฅเจฟเจฐ, เจนเจพเจฐเจก-เจ•เฉ‹เจกเจก เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‡เจ—เฉ€เฅค

เจ•เจฆเจฎ 2 - NGINX เจธเฉฐเจฐเจšเจจเจพ

เจชเจนเจฟเจฒเจพ เจนเจฟเฉฑเจธเจพ nginx.conf เจ•เฉเจ NGINX เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆ เจœเจฟเจจเฉเจนเจพเจ‚ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค

เจตเจฐเจ•เจฐ เจ•เจจเฉˆเจ•เจธเจผเจจ

เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจ•เจฐเจฎเจšเจพเจฐเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจ…เจคเฉ‡ เจ•เจจเฉˆเจ•เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจธเฉฐเจ–เจฟเจ† เจจเฉ‚เฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค เจ‡เจน เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ เจ•เจฟเจตเฉ‡เจ‚ NGINX เจฎเฉฐเจ— เจจเฉ‚เฉฐ เจชเฉ‚เจฐเจพ เจ•เจฐเจจ เจฒเจˆ เจธเจ•เฉ‡เจฒ เจ•เจฐเฉ‡เจ—เจพเฅค

worker_processes  2;

events {
  worker_connections   2000;
}

เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจตเฉฑเจ–-เจตเฉฑเจ– เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจจเจพเจฒ เจตเจฐเจ•เจซเจฒเฉ‹ เจ…เจคเฉ‡ เจ•เจจเฉˆเจ•เจธเจผเจจเจพเจ‚ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจฆเฉ‚เจค เจธเจฟเจธเจŸเจฎ เจตเจฟเฉฑเจš เจนเจฐเฉ‡เจ• เจนเจพเจฐเจกเจตเฉ‡เจ…เจฐ เจฅเจฐเจฟเฉฑเจก เจฒเจˆ เจ‡เฉฑเจ• เจตเจฐเจ•เจฐ เจฅเจฐเจฟเฉฑเจก เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค เจนเจฐเฉ‡เจ• เจตเจฐเจ•เจฐ เจฅเฉเจฐเฉˆเจก เจ‡เฉฑเจ• เจ—เฉˆเจฐ-เจฌเจฒเจพเจ• เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจ‡เจตเฉˆเจ‚เจŸ เจฒเฉ‚เจช เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจœเจฟเจธ เจฒเจˆ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉˆ

  1. เจนเจฐ เจธเฉเจฃเจจ เจตเจพเจฒเฉ‡ เจจเฉ‚เฉฐ เจธเฉเจฃเจจเจพ
  2. เจจเจตเฉ‡เจ‚ เจ•เจจเฉˆเจ•เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจธเจตเฉ€เจ•เจพเจฐ เจ•เจฐเจจเจพ
  3. เจ•เจจเฉˆเจ•เจธเจผเจจ เจฒเจˆ เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเฉˆเฉฑเจŸ เจฌเจฃเจพเจ‰เจฃเจพ
  4. เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจฆเฉ‡ เจœเฉ€เจตเจจ เจ•เจพเจฒ เจฆเฉŒเจฐเจพเจจ เจธเจพเจฐเฉ‡ I/O เจ“เจชเจฐเฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเฉ‹เฅค

เจ…เฉฑเจ—เฉ‡ เจฆเฉ€ เจธเจพเจฐเฉ€ เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจตเจฐเจ•เจฐ เจฅเฉเจฐเฉˆเจก เจตเจฟเฉฑเจš เจนเฉˆเจ‚เจกเจฒ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจ•เจฟเจธเฉ‡ เจตเฉ€ เจซเจพเจฐเจตเจฐเจกเจฟเฉฐเจ— เจตเจฟเจตเจนเจพเจฐ เจธเจฎเฉ‡เจคเฅค

เจฆเฉ‚เจค เจตเจฟเฉฑเจš เจนเจฐเฉ‡เจ• เจตเจฐเจ•เจฐ เจฅเจฐเจฟเฉฑเจก เจฒเจˆ, เจ‡เฉฑเจ• เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจชเฉ‚เจฒ เจนเฉˆเฅค เจ‡เจธเจฒเจˆ HTTP/2 เจ•เจจเฉˆเจ•เจธเจผเจจ เจชเฉ‚เจฒ เจ‡เฉฑเจ• เจธเจฎเฉ‡เจ‚ เจตเจฟเฉฑเจš เจชเฉเจฐเจคเฉ€ เจฌเจพเจนเจฐเฉ€ เจนเฉ‹เจธเจŸ เจธเจฟเจฐเจซ เจ‡เฉฑเจ• เจ•เจจเฉˆเจ•เจธเจผเจจ เจธเจฅเจพเจชเจค เจ•เจฐเจฆเฉ‡ เจนเจจ, เจœเฉ‡เจ•เจฐ เจšเจพเจฐ เจตเจฐเจ•เจฐ เจฅเฉเจฐเฉˆเจก เจนเจจ เจคเจพเจ‚ เจ‡เฉฑเจ• เจธเจฅเจฟเจฐ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจชเฉเจฐเจคเฉ€ เจฌเจพเจนเจฐเฉ€ เจนเฉ‹เจธเจŸ เจšเจพเจฐ HTTP/2 เจ•เจจเฉˆเจ•เจธเจผเจจ เจนเฉ‹เจฃเจ—เฉ‡เฅค เจนเจฐ เจšเฉ€เจœเจผ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเจฐเจ•เจฐ เจฅเจฐเจฟเฉฑเจก เจตเจฟเฉฑเจš เจฐเฉฑเจ– เจ•เฉ‡, เจฒเจ—เจญเจ— เจธเจพเจฐเฉ‡ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจฌเจฟเจจเจพเจ‚ เจฌเจฒเฉŒเจ• เจ•เฉ€เจคเฉ‡ เจฒเจฟเจ–เจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‡เจน เจธเจฟเฉฐเจ—เจฒ เจฅเจฐเจฟเฉฑเจกเจก เจธเจจเฅค เจœเฉ‡เจ•เจฐ เจฒเฉ‹เฉœ เจคเฉ‹เจ‚ เจตเฉฑเจง เจตเจฐเจ•เจฐ เจฅเฉเจฐเฉˆเฉฑเจก เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจคเจพเจ‚ เจ‡เจธ เจจเจพเจฒ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจฌเจฐเจฌเจพเจฆ เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆ, เจตเฉฑเจกเฉ€ เจ—เจฟเจฃเจคเฉ€ เจตเจฟเฉฑเจš เจตเจฟเจนเจฒเฉ‡ เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจฌเจฃ เจธเจ•เจฆเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจ•เจจเฉˆเจ•เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉ‚เจฒ เจตเจฟเฉฑเจš เจตเจพเจชเจธ เจ•เฉ€เจคเฉ‡ เจœเจพเจฃ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจจเฉ‚เฉฐ เจ˜เจŸเจพ เจธเจ•เจฆเฉ‡ เจนเจจเฅค

เจนเฉ‹เจฐ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฒเจˆ เจตเฉ‡เจ–เฉ‹ เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจฌเจฒเฉŒเจ—.

HTTP เจธเฉฐเจฐเจšเจจเจพ

เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเจพ NGINX เจธเฉฐเจฐเจšเจจเจพ เจฌเจฒเจพเจ• HTTP เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ:

  • เจ•เจฟเจนเฉœเฉ€เจ†เจ‚ เจฎเจพเจˆเจฎ เจ•เจฟเจธเจฎเจพเจ‚ เจธเจฎเจฐเจฅเจฟเจค เจนเจจ
  • เจชเฉ‚เจฐเจต-เจจเจฟเจฐเจงเจพเจฐเจค เจธเจฎเจพเจ‚ เจธเจฎเจพเจชเจค
  • Gzip เจธเฉฐเจฐเจšเจจเจพ

เจคเฉเจธเฉ€เจ‚ เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจตเจฟเฉฑเจš เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เจนเจจเจพเจ‚ เจชเจนเจฟเจฒเฉ‚เจ†เจ‚ เจจเฉ‚เฉฐ เจ…เจจเฉเจ•เฉ‚เจฒเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจœเจฟเจธ เจฌเจพเจฐเฉ‡ เจ…เจธเฉ€เจ‚ เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš เจšเจฐเจšเจพ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจ•เจฆเจฎ 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 - เจŸเจฟเจ•เจพเจฃเจพ เจธเฉฐเจฐเจšเจจเจพ

เจœเจฆเฉ‹เจ‚ เจ•เฉ‹เจˆ เจฌเฉ‡เจจเจคเฉ€ NGINX เจตเจฟเฉฑเจš เจ†เจ‰เจ‚เจฆเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจธเจฅเจพเจจ เจฌเจฒเจพเจ• เจ‡เจน เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจ•เจฟเจตเฉ‡เจ‚ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจŸเฉเจฐเฉˆเจซเจฟเจ• เจจเฉ‚เฉฐ เจ•เจฟเฉฑเจฅเฉ‡ เจฐเฉ‚เจŸ เจ•เจฐเจจเจพ เจนเฉˆเฅค เจนเฉ‡เจ เจฒเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจตเจฟเฉฑเจš, เจธเจพเจˆเจŸ เจฆเจพ เจธเจพเจฐเจพ เจŸเฉเจฐเฉˆเจซเจฟเจ• เจ‡เฉฑเจ• เจ…เฉฑเจชเจธเจŸเจฐเฉ€เจฎ (เจ…เจจเฉเจตเจพเจฆเจ• เจฆเจพ เจจเฉ‹เจŸ: เจ…เฉฑเจชเจธเจŸเจฐเฉ€เจฎ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจธเจฐเจตเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉˆ) เจจเจพเจฎเจ• เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจฟเฉฑเจš เจคเจฌเจฆเฉ€เจฒ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค targetCluster. เจ…เฉฑเจชเจธเจŸเฉเจฐเฉ€เจฎ เจ•เจฒเฉฑเจธเจŸเจฐ เจ‰เจนเจจเจพเจ‚ เจจเฉ‹เจกเจพเจ‚ เจจเฉ‚เฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจฌเฉ‡เจจเจคเฉ€ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจ…เจธเฉ€เจ‚ เจ…เจ—เจฒเฉ‡ เจชเฉœเจพเจ… เจตเจฟเฉฑเจš เจ‡เจธ เจฌเจพเจฐเฉ‡ เจšเจฐเจšเจพ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

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

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

เจฆเฉ‚เจค 'เจคเฉ‡, เจซเจฟเจฒเจŸเจฐ เจ…เจœเจฟเจนเจพ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค

เจฆเฉ‚เจค เจซเจฟเจฒเจŸเจฐ

เจ‡เฉฑเจ• เจธเจฅเจฟเจฐ เจธเฉฐเจฐเจšเจจเจพ เจฒเจˆ, เจซเจฟเจฒเจŸเจฐ เจ‡เจน เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจฆเฉ‡ เจนเจจ เจ•เจฟ เจ†เจ‰เจฃ เจตเจพเจฒเฉ€เจ†เจ‚ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเฉ€ เจนเฉˆเฅค เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจซเจฟเจฒเจŸเจฐ เจธเฉˆเฉฑเจŸ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจœเฉ‹ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเฉ‡ เจนเจจ เจธเจฐเจตเจฐ_เจจเจพเจฎ เจชเจฟเจ›เจฒเฉ‡ เจชเฉœเจพเจ… เจตเจฟเฉฑเจš. เจœเจฆเฉ‹เจ‚ เจ†เจ‰เจฃ เจตเจพเจฒเฉ€เจ†เจ‚ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจ†เจ‰เจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ เจœเฉ‹ เจ•เฉเจ เจ–เจพเจธ เจกเฉ‹เจฎเฉ‡เจจเจพเจ‚ เจ…เจคเฉ‡ เจฐเฉ‚เจŸเจพเจ‚ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ, เจคเจพเจ‚ เจ†เจตเจพเจœเจพเจˆ เจจเฉ‚เฉฐ เจ•เจฒเฉฑเจธเจŸเจฐ เจตเฉฑเจฒ เจฐเฉ‚เจŸ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจ‡เฉฑเจ• 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 เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฌเจฟเจฒเจŸ-เจ‡เจจ เจซเจฟเจฒเจŸเจฐ เจนเฉˆเฅค เจนเฉ‹เจฐ เจซเจฟเจฒเจŸเจฐ เจธเจผเจพเจฎเจฒ เจนเจจ เจฐเฉ‡เจกเจฟเจธ, เจฎเฉŒเจ—เฉ‹, TCP. เจคเฉเจธเฉ€เจ‚ เจชเฉ‚เจฐเฉ€ เจธเฉ‚เจšเฉ€ เจ‡เฉฑเจฅเฉ‡ เจฒเฉฑเจญ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ.

เจนเฉ‹เจฐ เจฒเฉ‹เจก เจธเฉฐเจคเฉเจฒเจจ เจจเฉ€เจคเฉ€เจ†เจ‚ เจฌเจพเจฐเฉ‡ เจตเจงเฉ‡เจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฒเจˆ, เจตเฉ‡เจ–เฉ‹ เจฐเจพเจœเจฆเฉ‚เจค เจฆเจธเจคเจพเจตเฉ‡เจœเจผ.

เจ•เจฆเจฎ 5 - เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจ…เจคเฉ‡ เจ…เฉฑเจชเจธเจŸเจฐเฉ€เจฎ เจธเฉฐเจฐเจšเจจเจพ

NGINX เจตเจฟเฉฑเจš, เจ…เฉฑเจชเจธเจŸเฉเจฐเฉ€เจฎ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ เจŸเจพเจฐเจ—เฉ‡เจŸ เจธเจฐเจตเจฐเจพเจ‚ เจฆเฉ‡ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจจเฉ‚เฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐเจฆเฉ€ เจนเฉˆ เจœเฉ‹ เจŸเฉเจฐเฉˆเจซเจฟเจ• เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจเจ—เฉ‡เฅค เจ‡เจธ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš, เจฆเฉ‹ เจ•เจฒเฉฑเจธเจŸเจฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเฉ‡ เจ—เจ เจธเจจ.

  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 เจจเจคเฉ€เจœเฉ‡ เจคเฉ‹เจ‚ เจนเจฐเฉ‡เจ• เจตเจพเจชเจธ เจ•เฉ€เจคเฉ‡ IP เจเจกเจฐเฉˆเฉฑเจธ เจจเฉ‚เฉฐ เจ…เฉฑเจชเจธเจŸเฉเจฐเฉ€เจฎ เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเจชเฉฑเจธเจผเจŸ เจนเฉ‹เจธเจŸ เจฎเฉฐเจจเจฟเจ† เจœเจพเจตเฉ‡เจ—เจพเฅค เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจœเฉ‡เจ•เจฐ เจ•เฉ‹เจˆ เจฌเฉ‡เจจเจคเฉ€ เจฆเฉ‹ IP เจชเจคเฉ‡ เจตเจพเจชเจธ เจ•เจฐเจฆเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจฆเฉ‚เจค เจ‡เจน เจฎเฉฐเจจ เจฒเจตเฉ‡เจ—เจพ เจ•เจฟ เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจฟเฉฑเจš เจฆเฉ‹ เจนเฉ‹เจธเจŸ เจนเจจ, เจ…เจคเฉ‡ เจฆเฉ‹เจตเฉ‡เจ‚ เจฒเฉ‹เจก เจธเฉฐเจคเฉเจฒเจฟเจค เจนเฉ‹เจฃเฉ‡ เจšเจพเจนเฉ€เจฆเฉ‡ เจนเจจเฅค เจœเฉ‡เจ•เจฐ เจจเจคเฉ€เจœเฉ‡ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจฎเฉ‡เจœเจผเจฌเจพเจจ เจจเฉ‚เฉฐ เจนเจŸเจพ เจฆเจฟเฉฑเจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจฆเฉ‚เจค เจ‡เจน เจฎเฉฐเจจ เจฒเจตเฉ‡เจ—เจพ เจ•เจฟ เจ‡เจน เจนเฉเจฃ เจฎเฉŒเจœเฉ‚เจฆ เจจเจนเฉ€เจ‚ เจนเฉˆ เจ…เจคเฉ‡ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจพ เจ•เจจเฉˆเจ•เจธเจผเจจ เจชเฉ‚เจฒ เจคเฉ‹เจ‚ เจŸเฉเจฐเฉˆเจซเจฟเจ• เจ–เจฟเฉฑเจšเฉ‡เจ—เจพเฅค

เจตเจงเฉ‡เจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฒเจˆ เจตเฉ‡เจ–เฉ‹ เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ.

เจ•เจฆเจฎ 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; เจธเฉเจฐเฉฑเจ–เจฟเจ† เจจเฉ‚เฉฐ เจฌเจฟเจนเจคเจฐ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ NGINX เจจเฉ‚เฉฐ เจ˜เฉฑเจŸ-เจ…เจงเจฟเจ•เจพเจฐ เจชเฉเจฐเจพเจชเจค เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจตเจœเฉ‹เจ‚ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจจเจฟเจธเจผเจšเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจ‡เฉฑเจ• เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเจพ เจฎเจพเจฒเจ• เจ•เฉŒเจฃ เจนเฉˆ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจ•เจฐเจจ เจฒเจˆ เจ•เจฒเจพเจ‰เจก-เจ…เจงเจพเจฐเจฟเจค เจชเจนเฉเฉฐเจš เจฒเฉˆเจ‚เจฆเจพ เจนเฉˆเฅค เจœเจฆเฉ‹เจ‚ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ•เฉฐเจŸเฉ‡เจจเจฐ เจฐเจพเจนเฉ€เจ‚ เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจšเจฒเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ˜เฉฑเจŸ เจตเจฟเจธเจผเฉ‡เจธเจผ เจ…เจงเจฟเจ•เจพเจฐ เจชเฉเจฐเจพเจชเจค เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจจเจฟเจธเจผเจšเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚เฅค

เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจฒเจพเจ‚เจš เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€ เจ•เจฎเจพเจ‚เจก เจนเฉ‹เจธเจŸ 'เจคเฉ‡ เจกเฉŒเจ•เจฐ เจ•เฉฐเจŸเฉ‡เจจเจฐ เจฐเจพเจนเฉ€เจ‚ เจเจ‚เจตเฉ‹เจ เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจจเฉ‚เฉฐ เจšเจฒเจพเจเจ—เฉ€เฅค เจ‡เจน เจ•เจฎเจพเจ‚เจก เจฆเฉ‚เจค เจจเฉ‚เฉฐ เจชเฉ‹เจฐเจŸ 80 'เจคเฉ‡ เจ†เจ‰เจฃ เจตเจพเจฒเฉ€เจ†เจ‚ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจธเฉเจฃเจจ เจฆเฉ€ เจธเจฎเจฐเฉฑเจฅเจพ เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจฒเจฟเจธเจจเจฐ เจธเฉฐเจฐเจšเจจเจพ เจตเจฟเฉฑเจš เจฆเจฐเจธเจพเจ เจ—เจ เจนเจจ, เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจชเฉ‹เจฐเจŸ 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. เจ‡เจน เจ‡เจธ เจฒเจˆ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ…เฉฑเจชเจธเจŸเจฐเฉ€เจฎ เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจ•เฉฐเจฎ เจจเจนเฉ€เจ‚ เจ•เจฐ เจฐเจนเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจ‰เจชเจฒเจฌเจง เจจเจนเฉ€เจ‚ เจนเจจเฅค เจ‡เจธ เจฒเจˆ, เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจ•เฉ‹เจฒ เจฌเฉ‡เจจเจคเฉ€ เจฒเจˆ เจ•เฉ‹เจˆ เจ‰เจชเจฒเจฌเจง เจŸเจฟเจ•เจพเจฃเฉ‡ เจจเจนเฉ€เจ‚ เจนเจจเฅค เจนเฉ‡เจ  เจฆเจฟเฉฑเจคเฉ€ เจ•เจฎเจพเจ‚เจก 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/

เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš, rpm เจ•เฉ‹เจฒ เจ‡เฉฑเจ• systemd เจธเฉ‡เจตเจพ เจธเฉฐเจฐเจšเจจเจพ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค

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

เจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจธเจฅเจฟเจฐ เจธเจฎเฉฑเจ—เจฐเฉ€ เจฆเฉ€ เจธเฉ‡เจตเจพ เจ•เจฐเจจ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ, เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจฒเจˆ เจ•เฉŒเจฃ เจตเฉ‹เจŸ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ: https://github.com/envoyproxy/envoy/issues/378

เจธเจฟเจฐเจซเจผ เจฐเจœเจฟเจธเจŸเจฐเจก เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจนเฉ€ เจธเจฐเจตเฉ‡เจ–เจฃ เจตเจฟเฉฑเจš เจนเจฟเฉฑเจธเจพ เจฒเฉˆ เจธเจ•เจฆเฉ‡ เจนเจจเฅค เจธเจพเจˆเจจ - เจ‡เจจ, เจคเฉเจนเจพเจกเจพ เจธเฉเจ†เจ—เจค เจนเฉˆ.

เจ•เฉ€ เจ‡เจธ เจชเฉ‹เจธเจŸ เจจเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฐเจพเจœเจฆเฉ‚เจค เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจ…เจคเฉ‡ เจŸเฉˆเจธเจŸ เจ•เจฐเจจ เจฒเจˆ เจ‰เจคเจธเจผเจพเจนเจฟเจค เจ•เฉ€เจคเจพ เจนเฉˆ?

  • เจœเฉ€

  • เจ•เฉ‹เจˆ เจตเฉ€

75 เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจจเฉ‡ เจตเฉ‹เจŸ เจ•เฉ€เจคเจพเฅค 18 เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฌเจšเฉ‡ เจนเฉ‹เจ เจนเจจเฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹