0Pricing
Cloud & IT Cert Prep · บทเรียน

กฎผู้รับฟังและการกำหนดเส้นทางตามเส้นทาง

เขียนกฎผู้รับฟังบน ALB เพื่อส่งคำขอไปยังกลุ่มเป้าหมายต่างกันตามส่วนหัวโฮสต์ รูปแบบเส้นทาง หรือสตริงคำค้น

กฎผู้รับฟังและการกำหนดเส้นทางตามเส้นทาง เป็นบทเรียน Cloud & IT Cert Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cloud & IT Cert Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน

อธิบายตัวรับฟังของ ALB

ตัวรับฟังของ ALB คือกระบวนการที่ตรวจสอบคำขอเชื่อมต่อโดยใช้โพรโทคอลและพอร์ตที่คุณระบุ เช่น HTTP บนพอร์ต 80 หรือ HTTPS บนพอร์ต 443 ตัวรับฟังแต่ละตัวมีกฎอย่างน้อยหนึ่งกฎที่กำหนดว่าจะส่งต่อคำขอไปที่ใดโดยพิจารณาจากเนื้อหาของคำขอ

ตัวรับฟังต้องมีกฎเริ่มต้น (การดำเนินการแบบครอบคลุมทุกกรณีเมื่อไม่มีกฎอื่นตรงกัน) และสามารถมีกฎเพิ่มเติมได้สูงสุด 100 กฎ ระบบจะประเมินกฎตามลำดับความสำคัญ (หมายเลขต่ำกว่าหมายถึงความสำคัญสูงกว่า) เมื่อคำขอตรงตามเงื่อนไขของกฎ ระบบจะดำเนินการตามการกระทำที่เกี่ยวข้อง และจะไม่ประเมินกฎถัดไป

# Create an HTTP listener on port 80
aws elbv2 create-listener \
  --load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:123456789:loadbalancer/app/my-alb/abc123 \
  --protocol HTTP \
  --port 80 \
  --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/default-tg/def456

เงื่อนไขของกฎ

กฎตัวรับฟังจะจับคู่คำขอตามเงื่อนไข คุณสามารถรวมหลายเงื่อนไขไว้ในกฎเดียวได้ (ทุกเงื่อนไขต้องตรงกันจึงจะใช้กฎได้) ประเภทเงื่อนไขที่มีให้ใช้ ได้แก่:

  • ส่วนหัวโฮสต์: จับคู่กับส่วนหัว HTTP Host เช่น api.example.com
  • รูปแบบเส้นทาง: จับคู่กับเส้นทาง URL เช่น /api/*, /images/*.jpg
  • ส่วนหัว HTTP: จับคู่กับชื่อส่วนหัว HTTP และรูปแบบค่าของส่วนหัวใดก็ได้
  • เมธอดคำขอ HTTP: จับคู่กับเมธอด HTTP (GET, POST, DELETE และอื่น ๆ)
  • สตริงคำค้นหา: จับคู่กับคู่คีย์-ค่าในสตริงคำค้นหา
  • IP ต้นทาง: จับคู่กับช่วง CIDR ของ IP ไคลเอ็นต์

การกำหนดเส้นทางตามเส้นทาง

การกำหนดเส้นทางตามเส้นทางจะส่งคำขอไปยังกลุ่มเป้าหมายที่แตกต่างกันโดยพิจารณาจากเส้นทาง URL นี่เป็นรูปแบบการกำหนดเส้นทางที่พบได้บ่อยที่สุดสำหรับไมโครเซอร์วิสที่อยู่ด้านหลัง ALB เดียว ตัวอย่างกฎบน ALB หนึ่งตัว:

  • เส้นทางเป็น /api/* → กลุ่มเป้าหมาย: api-service
  • เส้นทางเป็น /images/* → กลุ่มเป้าหมาย: image-processor
  • เส้นทางเป็น /admin/* → กลุ่มเป้าหมาย: admin-app
  • ค่าเริ่มต้น → กลุ่มเป้าหมาย: frontend-app

วิธีนี้ทำให้ ALB เพียงตัวเดียวทำหน้าที่ด้านหน้าสำหรับบริการที่แยกจากกันหลายบริการได้ โดยไม่ต้องใช้ตัวจัดสมดุลโหลดหลายตัว จึงช่วยลดค่าใช้จ่ายและความซับซ้อนของ DNS

# Create a path-based routing rule
aws elbv2 create-rule \
  --listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
  --priority 10 \
  --conditions Field=path-pattern,Values='/api/*' \
  --actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/api-service/xyz789

การกำหนดเส้นทางตามโฮสต์

การกำหนดเส้นทางตามโฮสต์จะกำหนดเส้นทางคำขอตามส่วนหัว HTTP Host ทำให้สามารถให้บริการชื่อโดเมนหลายชื่อ (โฮสต์เสมือน) จาก ALB เดียวได้ ตัวอย่าง:

  • โฮสต์เป็น api.example.com → กลุ่มเป้าหมาย api-service
  • โฮสต์เป็น admin.example.com → กลุ่มเป้าหมาย admin-app
  • โฮสต์เป็น www.example.com → กลุ่มเป้าหมาย frontend

ชื่อโดเมนแต่ละชื่อจะมีระเบียน CNAME หรือ ALIAS ที่ชี้ไปยังชื่อ DNS ของ ALB เดียวกัน แต่ ALB จะกำหนดเส้นทางของแต่ละชื่อไปยังแบ็กเอนด์ที่เหมาะสมโดยพิจารณาจากส่วนหัวโฮสต์ การกำหนดเส้นทางตามโฮสต์เหมาะอย่างยิ่งสำหรับซอฟต์แวร์แบบบริการหลายผู้เช่า หรือแอปพลิเคชันแบบรวมที่กำลังแยกออกเป็นไมโครเซอร์วิส

# Create a host-based routing rule
aws elbv2 create-rule \
  --listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
  --priority 5 \
  --conditions '[{"Field":"host-header","HostHeaderConfig":{"Values":["api.example.com"]}}]' \
  --actions '[{"Type":"forward","TargetGroupArn":"arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/api-service/xyz789"}]'

การกระทำของกฎ

เมื่อเงื่อนไขของกฎตรงกัน ALB จะดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้:

  • ส่งต่อ: ส่งต่อคำขอไปยังกลุ่มเป้าหมายหนึ่งกลุ่มหรือมากกว่า (พร้อมน้ำหนักที่กำหนดได้)
  • เปลี่ยนเส้นทาง: ส่งคืนการเปลี่ยนเส้นทาง HTTP (301 หรือ 302) ไปยัง URL ใหม่ ซึ่งมีประโยชน์สำหรับการเปลี่ยนเส้นทางจาก HTTP ไปยัง HTTPS
  • การตอบกลับแบบคงที่: ส่งคืนการตอบกลับ HTTP แบบคงที่พร้อมรหัสสถานะ ประเภทเนื้อหา และเนื้อหาที่ระบุ ซึ่งมีประโยชน์สำหรับหน้าบำรุงรักษาหรือการตอบกลับการตรวจสอบสถานะแบบง่าย
  • ยืนยันตัวตนด้วย Cognito: ยืนยันตัวตนผู้ใช้ผ่านกลุ่มผู้ใช้ Cognito ก่อนส่งต่อ
  • ยืนยันตัวตนด้วย OIDC: ยืนยันตัวตนผู้ใช้ผ่านผู้ให้บริการข้อมูลประจำตัวที่เข้ากันได้กับ OIDC รายใดก็ได้
# Create a redirect rule: HTTP to HTTPS
aws elbv2 create-rule \
  --listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/http80 \
  --priority 1 \
  --conditions '[{"Field":"path-pattern","PathPatternConfig":{"Values":["/*"]}}]' \
  --actions '[{"Type":"redirect","RedirectConfig":{"Protocol":"HTTPS","Port":"443","StatusCode":"HTTP_301"}}]'

รูปแบบการเปลี่ยนเส้นทางจาก HTTP ไปยัง HTTPS

รูปแบบกฎตัวรับฟังที่พบได้บ่อยที่สุดคือการเปลี่ยนเส้นทางจาก HTTP ไปยัง HTTPS:

  1. สร้างตัวรับฟัง HTTP บนพอร์ต 80พร้อมกฎหนึ่งข้อ: เปลี่ยนเส้นทางทราฟฟิกทั้งหมด (/*) ไปยัง HTTPS ด้วยรหัสสถานะ 301
  2. สร้างตัวรับฟัง HTTPS บนพอร์ต 443พร้อมกฎการกำหนดเส้นทางจริงของคุณ ซึ่งชี้ไปยังกลุ่มเป้าหมาย

วิธีนี้ทำให้ผู้ใช้ที่พิมพ์ http:// หรือเปิดลิงก์ HTTP เก่า ถูกเปลี่ยนเส้นทางไปยัง HTTPS โดยอัตโนมัติ โดยไม่ต้องแก้ไขระดับแอปพลิเคชัน การเปลี่ยนเส้นทางทั้งหมดจัดการที่ระดับตัวจัดสมดุลโหลด

การกระทำการตอบกลับแบบคงที่

การกระทำการตอบกลับแบบคงที่จะส่งคืนการตอบกลับ HTTP แบบคงที่จาก ALB โดยไม่ส่งต่อคำขอไปยังเป้าหมายใด ๆ ใช้การกระทำนี้สำหรับ:

  • ส่งคืนหน้าบำรุงรักษาที่มีสถานะ 503 สำหรับเส้นทางที่ระบุระหว่างการบำรุงรักษา
  • จัดเตรียมจุดปลายทางตรวจสอบสถานะแบบเบาโดยตรงจาก ALB (ส่งคืน 200 OK ทันทีโดยไม่ใช้ทรัพยากรของแบ็กเอนด์)
  • บล็อกเส้นทางที่ระบุด้วยการตอบกลับ 403 Forbidden

การตอบกลับแบบคงที่มีประโยชน์สำหรับนำเส้นทางออกจากการให้บริการชั่วคราว โดยไม่ต้องแก้ไขโค้ดแอปพลิเคชันหรือปรับใช้ใหม่ เพียงปรับกฎตัวรับฟังแบบไดนามิก

# Return 503 maintenance page for a specific path
aws elbv2 create-rule \
  --listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
  --priority 20 \
  --conditions '[{"Field":"path-pattern","PathPatternConfig":{"Values":["/checkout/*"]}}]' \
  --actions '[{"Type":"fixed-response","FixedResponseConfig":{"StatusCode":"503","ContentType":"text/html","MessageBody":"<h1>Maintenance</h1>"}}]'

การยืนยันตัวตนของ ALB ด้วย Cognito

การกระทำ authenticate-cognitoของ ALB ผสานรวมกับกลุ่มผู้ใช้ Amazon Cognito เพื่อจัดการการยืนยันตัวตนผู้ใช้ก่อนส่งต่อคำขอไปยังแอปพลิเคชันของคุณ เมื่อผู้ใช้ที่ยังไม่ได้ยืนยันตัวตนเข้าถึงกฎตัวรับฟังที่มีการป้องกัน ALB จะเปลี่ยนเส้นทางผู้ใช้ไปยังส่วนติดต่อผู้ใช้สำหรับเข้าสู่ระบบที่โฮสต์โดย Cognito หลังจากยืนยันตัวตนสำเร็จ ALB จะตั้งค่าคุกกี้ที่เข้ารหัส และส่งต่อคำขอพร้อมส่วนหัวข้อมูลประจำตัวผู้ใช้

วิธีนี้ช่วยย้ายตรรกะการยืนยันตัวตนทั้งหมดออกจากแอปพลิเคชันของคุณ แบ็กเอนด์จะได้รับส่วนหัว X-Amzn-Oidc-Identity, X-Amzn-Oidc-Data และ X-Amzn-Oidc-Access-Token ซึ่งมีข้อมูลสิทธิ์ของผู้ใช้ที่ยืนยันตัวตนแล้ว

การกำหนดเส้นทางตาม Query String และส่วนหัว

กฎของ ALB listener สามารถกำหนดเส้นทางตามพารามิเตอร์ query string และส่วนหัว HTTP ได้ ทำให้กำหนดเส้นทางคำขอได้อย่างละเอียด:

  • กำหนดเส้นทางไคลเอ็นต์มือถือโดยตรวจจับส่วนหัว User-Agent: *Mobile* เพื่อส่งไปยังแบ็กเอนด์ที่ปรับให้เหมาะกับอุปกรณ์มือถือ
  • กำหนดเส้นทางคำขอ API ระดับพรีเมียมโดยตรวจสอบส่วนหัวที่กำหนดเอง X-API-Tier: premium เพื่อส่งไปยังกลุ่มเป้าหมายที่ทำงานเร็วกว่า
  • กำหนดเส้นทางรูปแบบการทดสอบ A/B โดยอ่านพารามิเตอร์ query string ?variant=beta

การกำหนดเส้นทางตามส่วนหัวช่วยให้คุณใช้แฟล็กฟีเจอร์และแบ่งสัดส่วนทราฟฟิกที่ระดับโครงสร้างพื้นฐานได้ โดยไม่ต้องแก้ไขโค้ดของแอปพลิเคชัน

ลำดับความสำคัญและลำดับการประเมินกฎ

ระบบจะประเมินกฎตามลำดับความสำคัญจากน้อยไปมาก หมายเลขลำดับความสำคัญที่ต่ำกว่าจะถูกประเมินก่อน ระบบจะใช้การดำเนินการของกฎแรกที่ตรงเงื่อนไข และจะไม่ประเมินกฎถัดไปอีก กฎเริ่มต้นไม่มีหมายเลขลำดับความสำคัญ และจะถูกประเมินเป็นกฎสุดท้ายเสมอเพื่อรองรับคำขอที่ไม่ตรงกับกฎอื่น

แนวทางปฏิบัติที่ดีคือ กำหนดหมายเลขลำดับความสำคัญโดยเพิ่มทีละ 10 (10, 20, 30...) แทนการใช้จำนวนเต็มเรียงต่อกัน วิธีนี้จะเหลือช่วงว่างสำหรับแทรกกฎใหม่ระหว่างกฎที่มีอยู่ โดยไม่ต้องกำหนดหมายเลขใหม่ทั้งหมด กฎที่เฉพาะเจาะจงกว่า (เช่น เส้นทางร่วมกับส่วนหัวโฮสต์) ควรใช้หมายเลขที่ต่ำกว่า (มีลำดับความสำคัญสูงกว่า) กฎทั่วไป

# List rules for a listener (shows priorities)
aws elbv2 describe-rules \
  --listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
  --query 'Rules[*].{Priority:Priority,Conditions:Conditions[0].Field,Actions:Actions[0].Type}' \
  --output table

กฎของ Listener สำหรับไมโครเซอร์วิส

ALB เพียงหนึ่งตัวสามารถทำหน้าที่อยู่ด้านหน้าของแพลตฟอร์มไมโครเซอร์วิสทั้งระบบได้ โดยใช้กฎของ listener ตัวอย่างจากการใช้งานจริงที่รวมเงื่อนไขทั้งสามประเภทเข้าด้วยกัน:

  • ลำดับความสำคัญ 10: Host=api.example.com + Path=/v2/* → กลุ่มเป้าหมาย api-v2
  • ลำดับความสำคัญ 20: Host=api.example.com + Path=/v1/* → กลุ่มเป้าหมาย api-v1
  • ลำดับความสำคัญ 30: Host=auth.example.com → กลุ่มเป้าหมาย auth-service
  • ลำดับความสำคัญ 40: Host=www.example.com + Path=/static/* → การเปลี่ยนเส้นทางของ CloudFront
  • ค่าเริ่มต้น: Host=www.example.com → กลุ่มเป้าหมายส่วนหน้า

การออกแบบนี้ช่วยลดค่าใช้จ่ายด้วยการไม่ต้องใช้ตัวจัดสรรภาระแยกสำหรับแต่ละบริการ

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจแนวคิด AWS Solutions Architect (SAA-C03) จากบทเรียนนี้

สรุปบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า กฎของ listener ใช้กำหนดเส้นทางคำขอตามโฮสต์ เส้นทาง ส่วนหัว วิธีการ และ query string โดย ระบบจะประเมินกฎตามลำดับความสำคัญ และใช้กฎแรกที่ตรงเงื่อนไข อีกทั้ง การดำเนินการยังรวมถึงการส่งต่อ การเปลี่ยนเส้นทาง การตอบกลับแบบกำหนดตายตัว และการตรวจสอบสิทธิ์ด้วย Cognito การกำหนดเส้นทางตามเส้นทางและโฮสต์ช่วยให้ ALB เพียงหนึ่งตัวทำหน้าที่อยู่ด้านหน้าของไมโครเซอร์วิสหลายตัวได้ บทถัดไป เราจะศึกษาเรื่องการยุติการเข้ารหัส SSL และเซสชันแบบติดหนึบ

คำถามที่พบบ่อย

บทเรียน “กฎผู้รับฟังและการกำหนดเส้นทางตามเส้นทาง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “กฎผู้รับฟังและการกำหนดเส้นทางตามเส้นทาง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cloud & IT Cert Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “กฎผู้รับฟังและการกำหนดเส้นทางตามเส้นทาง”

เขียนกฎผู้รับฟังบน ALB เพื่อส่งคำขอไปยังกลุ่มเป้าหมายต่างกันตามส่วนหัวโฮสต์ รูปแบบเส้นทาง หรือสตริงคำค้น คุณปฏิบัติ Cloud & IT Cert Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cloud & IT Cert Prep หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cloud & IT Cert Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “กฎผู้รับฟังและการกำหนดเส้นทางตามเส้นทาง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Cloud & IT Cert Prep นี้ได้ไหม

ได้ บทเรียน Cloud & IT Cert Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ALB เทียบกับ NLB เทียบกับ GLB: ควรใช้แบบใด
  2. กลุ่มเป้าหมายและการตรวจสอบสถานะ
  3. กฎผู้รับฟังและการกำหนดเส้นทางตามเส้นทาง
  4. การสิ้นสุด SSL และเซสชันแบบยึดติด
← กลับไปที่ Cloud & IT Cert Prep