ตั้งค่าการส่งต่อ URL ตาม DNS ใน Amazon Route53 [ปิด]


140

ฉันกำลังพยายามตั้งค่าการส่งต่อใน Amazon Route53 บริการ DNS ล่าสุดของฉัน (Nettica) ทำให้ฉันสามารถกำหนดเส้นทางคำขอไปยัง "aws.example.com" ไปยัง "https://myaccount.signin.aws.amazon.com/console/"

ฟังก์ชั่นนี้รองรับโดย Route53 หรือไม่?

Nettica บรรลุเป้าหมายอย่างไร มันแทรกเรคคอร์ด A, CNAME, PTR หรือ TXT พิเศษหรือไม่?


การสร้างการกระจาย Cloudfront ด้วย URL ในฐานะที่เป็นแหล่งกำเนิดยังใช้งานได้ เพียงชี้โดเมนไปยังการแจกจ่าย Cloudfront จาก Route53 และตรวจสอบให้แน่ใจว่าได้กำหนดค่า TLS certs อย่างถูกต้อง
Deiwin

คำตอบ:


325

ฉันพบปัญหาเดียวกันกับที่ Saurav อธิบาย แต่ฉันต้องการค้นหาวิธีแก้ปัญหาที่ไม่ต้องการสิ่งอื่นนอกจาก Route 53 และ S3 ฉันสร้างคู่มือวิธีการสำหรับบล็อกของฉันโดยละเอียดสิ่งที่ฉันทำ

นี่คือสิ่งที่ฉันมาด้วย


วัตถุประสงค์

ใช้เฉพาะเครื่องมือที่มีอยู่ใน Amazon S3 และ Amazon Route 53 สร้าง URL Redirect ที่ส่งต่อโดยอัตโนมัติhttp://url-redirect-example.vivekmchawla.comไปยังหน้าลงชื่อเข้าใช้ของคอนโซล AWS ที่ใช้นามแฝงเป็น "MyAccount" ซึ่งอยู่ที่https :

คู่มือนี้จะสอนให้คุณตั้งค่าการส่งต่อ URL ไปยัง URL ใด ๆ ไม่ใช่เฉพาะจาก Amazon คุณจะได้เรียนรู้วิธีตั้งค่าการส่งต่อไปยังโฟลเดอร์เฉพาะ (เช่น "/ console" ในตัวอย่างของฉัน) และวิธีเปลี่ยนโปรโตคอลของการเปลี่ยนเส้นทางจาก HTTP เป็น HTTPS (หรือกลับกัน)


ขั้นตอนที่หนึ่ง: สร้าง S3 Bucket ของคุณ

เปิด S3 Management Console และคลิก "สร้างถัง"

เปิดคอนโซลการจัดการ S3 และคลิก "สร้างถัง"


ขั้นตอนที่สอง: ตั้งชื่อ S3 Bucket ของคุณ

ตั้งชื่อ S3 Bucket ของคุณ

  1. เลือกชื่อถัง ขั้นตอนนี้สำคัญมาก! คุณต้องตั้งชื่อ bucket อย่างแน่นอนเหมือนกับ URL ที่คุณต้องการตั้งค่าสำหรับการส่งต่อ สำหรับคู่มือนี้ฉันจะใช้ชื่อ "url-redirect-example.vivekmchawla.com"

  2. เลือกภูมิภาคใดก็ได้ที่เหมาะกับคุณที่สุด หากคุณไม่รู้ให้ใช้ค่าเริ่มต้น

  3. ไม่ต้องกังวลกับการตั้งค่าการบันทึก เพียงคลิกปุ่ม "สร้าง" เมื่อคุณพร้อม


ขั้นตอนที่ 3: เปิดใช้งานการโฮสต์เว็บไซต์แบบคงที่และระบุกฎการกำหนดเส้นทาง

เปิดใช้งานการโฮสต์เว็บไซต์แบบคงที่และระบุกฎการกำหนดเส้นทาง

  1. ในหน้าต่างคุณสมบัติเปิดการตั้งค่าสำหรับ "การโฮสต์เว็บไซต์แบบคงที่"
  2. เลือกตัวเลือกเพื่อ "เปิดใช้งานการโฮสต์เว็บไซต์"
  3. ป้อนค่าสำหรับ "เอกสารดัชนี" วัตถุ (เอกสาร) นี้จะไม่ถูกส่งโดย S3 และคุณไม่จำเป็นต้องอัปโหลด เพียงใช้ชื่อที่คุณต้องการ
  4. เปิดการตั้งค่าสำหรับ "แก้ไขกฎการเปลี่ยนเส้นทาง"
  5. วางข้อมูลโค้ด XML ต่อไปนี้ลงในทั้งหมด

    <RoutingRules>
      <RoutingRule>
        <Redirect>
          <Protocol>https</Protocol>
          <HostName>myaccount.signin.aws.amazon.com</HostName>
          <ReplaceKeyPrefixWith>console/</ReplaceKeyPrefixWith>
          <HttpRedirectCode>301</HttpRedirectCode>
        </Redirect>
      </RoutingRule>
    </RoutingRules>
    

ถ้าคุณอยากรู้เกี่ยวกับสิ่งที่ XML ที่ดังกล่าวข้างต้นจะทำแวะไปที่เอกสาร AWM สำหรับ "ไวยากรณ์สำหรับการระบุเส้นทางกฎ" เทคนิคโบนัส (ไม่ครอบคลุมที่นี่) http://redirect-destination.com/console/special-page.htmlจะถูกส่งต่อไปยังหน้าเว็บที่เฉพาะเจาะจงที่โฮสต์ปลายทางเช่น อ่านเกี่ยวกับ<ReplaceKeyWith>องค์ประกอบหากคุณต้องการฟังก์ชั่นนี้


ขั้นตอนที่ 4: จดบันทึก "ปลายทาง" ที่เปลี่ยนเส้นทางของคุณ

จดบันทึก Endpoint Bucket ของปลายทาง

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

ข้อควรระวัง! ถึงตอนนี้คุณสามารถคลิกที่ลิงค์นี้เพื่อตรวจสอบว่ากฎการเปลี่ยนเส้นทางของคุณถูกต้องหรือไม่ แต่ระวัง! นี่คือเหตุผล ...

สมมติว่าคุณป้อนค่าผิดภายใน<Hostname>แท็กในกฎการเปลี่ยนเส้นทางของคุณ บางทีคุณอาจจะตั้งใจพิมพ์แทนmyaccount.amazon.com myaccount.signin.aws.amazon.comหากคุณคลิกลิงก์เพื่อทดสอบ URL ปลายทาง AWS จะเปลี่ยนเส้นทางเบราว์เซอร์ของคุณไปยังที่อยู่ผิดอย่างมีความสุข!

หลังจากสังเกตเห็นความผิดพลาดของคุณคุณอาจแก้ไข<Hostname>ในกฎการเปลี่ยนเส้นทางของคุณเพื่อแก้ไขข้อผิดพลาด น่าเสียดายที่เมื่อคุณพยายามคลิกที่ลิงก์อีกครั้งคุณจะถูกนำไปสู่การเปลี่ยนเส้นทางไปยังที่อยู่ผิด! แม้ว่าคุณจะแก้ไข<Hostname>รายการเบราว์เซอร์ของคุณกำลังแคชรายการก่อนหน้า (ไม่ถูกต้อง!) สิ่งนี้เกิดขึ้นเพราะเราใช้การเปลี่ยนเส้นทาง HTTP 301 (ถาวร) ซึ่งเบราว์เซอร์เช่น Chrome และ Firefox จะแคชตามค่าเริ่มต้น

หากคุณคัดลอกและวาง URL ปลายทางไปยังเบราว์เซอร์อื่น (หรือล้างแคชในแคชปัจจุบันของคุณ) คุณจะได้รับโอกาสอีกครั้งว่า<Hostname>รายการที่อัปเดตของคุณนั้นถูกต้องหรือไม่

เพื่อความปลอดภัยหากคุณต้องการทดสอบ URL ปลายทางและกฎการเปลี่ยนเส้นทางของคุณคุณควรเปิดเซสชันการท่องเว็บแบบส่วนตัวเช่น "โหมดไม่ระบุตัวตน" ใน Chrome คัดลอกวางและทดสอบ URL ปลายทางในโหมดไม่ระบุตัวตนและสิ่งที่แคชจะหายไปเมื่อคุณปิดเซสชัน


ขั้นตอนที่ 5: เปิดคอนโซลการจัดการ Route53 และไปที่ชุดระเบียนสำหรับโซนที่โฮสต์ของคุณ (ชื่อโดเมน)

เปิดคอนโซลการจัดการเส้นทาง 53 เพื่อเพิ่มชุดระเบียนไปยังโซนที่โฮสต์ของคุณ

  1. เลือกโซนที่โฮสต์ (ชื่อโดเมน) ที่คุณใช้เมื่อคุณสร้างที่เก็บข้อมูลของคุณ เนื่องจากฉันตั้งชื่อ bucket ของฉัน "url-redirect-example.vivekmchawla.com" ฉันจะเลือก vivekmchawla.com Hosted Zone
  2. คลิกที่ปุ่ม "ไปที่ชุดบันทึก"

ขั้นตอนที่ 6: คลิกปุ่ม "สร้างชุดการบันทึก"

คลิกที่ปุ่มสร้างชุดบันทึก

การคลิก "สร้างชุดบันทึก" จะเปิดหน้าต่างสร้างชุดบันทึกทางด้านขวาของคอนโซลการจัดการเส้นทาง 53


ขั้นตอนที่ 7: สร้างชุดระเบียน CNAME

สร้างชุดระเบียน CNAME

  1. ในฟิลด์ชื่อป้อนส่วนชื่อโฮสต์ของ URL ที่คุณใช้เมื่อตั้งชื่อที่ฝากข้อมูล S3 ของคุณ "ส่วนชื่อโฮสต์" ของ URL นั้นเป็นทุกอย่างที่อยู่ด้านซ้ายของชื่อโฮสต์ของโซน ฉันตั้งชื่อ S3 bucket "url-redirect-example.vivekmchawla.com" ของฉันและ Hosted Zone ของฉันคือ "vivekmchawla.com" ดังนั้นส่วนชื่อโฮสต์ที่ฉันต้องป้อนคือ "url-redirect-example"

  2. เลือก "CNAME - ชื่อ Canonical" สำหรับประเภทของชุดบันทึกนี้

  3. สำหรับค่าให้วาง URL ปลายทางของที่ฝากข้อมูล S3 ที่เราสร้างขึ้นในขั้นตอนที่ 3

  4. คลิกปุ่ม "สร้างชุดบันทึก" สมมติว่าไม่มีข้อผิดพลาดคุณจะสามารถเห็นระเบียน CNAME ใหม่ในรายการ Hosted Zone ของรายการชุดระเบียน


ขั้นตอนที่ 8: ทดสอบการเปลี่ยนเส้นทาง URL ใหม่ของคุณ

เปิดแท็บเบราว์เซอร์ใหม่และพิมพ์ URL ที่เราเพิ่งตั้งค่า สำหรับผมที่http://url-redirect-example.vivekmchawla.com หากทุกอย่างทำงานถูกต้องคุณควรส่งตรงไปที่หน้าลงชื่อเข้าใช้ AWS

เนื่องจากเราใช้myaccount.signin.aws.amazon.comนามแฝงเป็น URL ปลายทางของการเปลี่ยนเส้นทางของเรา Amazon รู้ได้อย่างแม่นยำว่าบัญชีใดที่เราพยายามเข้าถึงและนำเราไปที่นั่นโดยตรง สิ่งนี้มีประโยชน์มากหากคุณต้องการให้ลิงค์ล็อกอิน AWS สั้น ๆ ที่สะอาดและมีตราสินค้าแก่พนักงานหรือผู้รับเหมา

ทุกอย่างเสร็จเรียบร้อย!  การส่งต่อ URL ของคุณควรนำคุณไปสู่หน้าลงชื่อเข้าใช้ AWS


สรุปผลการวิจัย

ฉันชอบบริการ AWS ส่วนตัว แต่ถ้าคุณตัดสินใจโยกย้ายการจัดการ DNS ไปที่ Amazon Route 53 การขาดการส่งต่อ URL อย่างง่ายอาจทำให้คุณผิดหวัง ฉันหวังว่าคู่มือนี้จะช่วยให้การตั้งค่าการส่งต่อ URL สำหรับโซนที่โฮสต์ของคุณง่ายขึ้นเล็กน้อย

หากคุณต้องการเรียนรู้เพิ่มเติมโปรดดูหน้าต่อไปนี้จากเว็บไซต์เอกสาร AWS

ไชโย!


15
+1 สำหรับโซลูชันที่ชาญฉลาดที่สุด - ขอบคุณมากที่สละเวลาในการรวบรวมขั้นตอนที่ยิ่งใหญ่เช่นนี้ฉันได้อัปเดตคำตอบของฉันเพื่ออ้างอิงผู้อ่านในอนาคตตามความต้องการของคุณ!
Steffen Opel

23
หมายเหตุ :: สำหรับผู้ที่ต้องการเปลี่ยนเส้นทางรูทโดเมน: example.org -> example.com - ทำทุกอย่างเหมือนกันยกเว้นใช้ A Record ที่เปิดใช้งาน "Alias: ใช่" จากนั้นเลือกที่เก็บข้อมูลเป็นเป้าหมาย
JaredBroad

10
ทางออกที่ดี แต่ฉันพบปัญหาในการใช้ https สำหรับ URL ดั้งเดิม หากที่ฝากข้อมูลที่ฉันกำลังนำคือ dev.example.com การส่งใหม่จะใช้งานได้ดีสำหรับ http: // dev.example.com แต่ล้มเหลวสำหรับ https: // dev.example.com ฉันไม่พบวิธีแก้ไขปัญหานี้
เกร็ก

4
@Greg ฉันคิดว่ามันอาจเกี่ยวข้องกับวิธีที่ Amazon จัดการกับ HTTPS สำหรับ S3 น่าเสียดายที่เมื่อใช้ CNAME เพื่อเข้าถึง S3 bucket คุณไม่สามารถบังคับ SSL โดยเพิ่ม "https" เนื่องจาก Amazon ไม่ได้โฮสต์ใบรับรองสำหรับ "* .example.com" เนื่องจาก S3 ไม่อนุญาตการเชื่อมต่อเราจึงไม่มีทางไปถึงตรรกะการเปลี่ยนเส้นทาง น่าเสียดายที่ฉันไม่เห็นวิธีแก้ปัญหานี้
Vivek M. Chawla

17
มีตัวเลือกใหม่คือ "เปลี่ยนเส้นทางคำขอทั้งหมดไปยังชื่อโฮสต์อื่น" ภายใต้ตัวเลือก Bucker ฉันใส่ URL ของ IAM เข้าสู่ระบบและทำงานได้อย่างมีเสน่ห์ไม่จำเป็นต้องใช้ XML
Dan Milon

145

การสนับสนุน AWS ชี้ให้เห็นวิธีที่ง่ายกว่า โดยพื้นฐานแล้วมันเป็นแนวคิดเดียวกับที่ @Vivek M. Chawla มีการใช้งานง่ายขึ้น

AWS S3:

  1. สร้างถังที่ตั้งชื่อด้วยโดเมนแบบเต็มของคุณเช่น aws.example.com
  2. บนคุณสมบัติถังข้อมูลเลือกRedirect all requests to another host nameและป้อน URL ของคุณ: https://myaccount.signin.aws.amazon.com/console/

AWS Route53:

  1. สร้างประเภทชุดบันทึก A. Yesเปลี่ยนนามแฝงไป คลิกที่Alias Targetฟิลด์และเลือก S3 bucket ที่คุณสร้างขึ้นในขั้นตอนก่อนหน้า

การอ้างอิง: วิธีเปลี่ยนเส้นทางโดเมนโดยใช้ Amazon Web Services

เอกสารอย่างเป็นทางการของ AWS: มีวิธีการเปลี่ยนเส้นทางโดเมนไปยังโดเมนอื่นโดยใช้ Amazon Route 53 หรือไม่?


16
ใช้งานได้ดีสำหรับ HTTP แต่ไม่ใช่ HTTPS
mythofechelon

@mythofechelon คุณหมายถึงอะไร? ฉันไม่ได้มีปัญหากับ https จนถึงตอนนี้ หากคุณต้องการใช้ https กับโดเมนของคุณ (เช่น: https: // aws.example.com) นี่เป็นปัญหาที่แตกต่างอย่างสิ้นเชิงเพราะคุณจะต้องใช้เซิร์ฟเวอร์ที่มีใบรับรอง SSL เพื่อให้สามารถทำเช่นนั้นได้
Roberto Schneiders

1
เอกสารอย่างเป็นทางการอยู่ที่นี่: aws.amazon.com/premiumsupport/knowledge-center/ ......
Mario Olivio Flores

2
Redirect all requests to another host nameตัวเลือกนี้ยังคงอยู่หรือไม่? ฉันไม่สามารถเห็นได้เมื่อฉันไปที่ถังข้อมูล
ดาน

1
นี่ควรเป็นคำตอบที่ถูกต้องดีกว่าในการอ้างอิงส่วนประกอบภายใน AWS โดยใช้นามแฝงเพื่อวัตถุประสงค์ด้านประสิทธิภาพแทนที่จะเป็น CNAME (ใช้งานได้ แต่ไม่ใช่วิธีที่ดีที่สุด)
Douglas Figueroa

11

ฉันสามารถใช้ nginx เพื่อจัดการการเปลี่ยนเส้นทาง 301 ไปยังหน้าลงชื่อเข้าใช้ aws

ไปที่โฟลเดอร์ nginx conf ของคุณ (ในกรณีของฉันมันคือ/etc/nginx/sites-availableสิ่งที่ฉันสร้าง symlink /etc/nginx/sites-enabledสำหรับไฟล์ conf ที่เปิดใช้งาน)

จากนั้นเพิ่มเส้นทางเปลี่ยนเส้นทาง

server {
  listen 80;
  server_name aws.example.com;
  return 301 https://myaccount.signin.aws.amazon.com/console;
}

หากคุณใช้ nginx เป็นไปได้ว่าคุณจะมีเซิร์ฟเวอร์บล็อกเพิ่มเติม (virtualhosts ในคำศัพท์ apache) เพื่อจัดการโซน apex (example.com) หรือคุณตั้งค่าไว้ ตรวจสอบให้แน่ใจว่าคุณได้กำหนดเป็นหนึ่งในเซิร์ฟเวอร์เริ่มต้นของคุณ

server {
  listen 80 default_server;
  server_name example.com;
  # rest of config ...
}

ในเส้นทาง 53, เพิ่มA recordสำหรับaws.example.comและตั้งค่าเป็น IP เดียวกันที่ใช้สำหรับปลายโซนของคุณ


ยิ่งไปกว่านั้นคือการใช้บันทึกนามแฝงเพื่อชี้ไปที่ตัวโหลดบาลานซ์แบบยืดหยุ่นที่ด้านหน้าของเครื่องนี้
maletor

9

ปรับปรุง

ในขณะที่คำตอบเดิมของฉันด้านล่างยังคงใช้ได้และอาจเป็นประโยชน์ในการทำความเข้าใจสาเหตุของการส่งต่อ URL ที่ใช้ DNS ที่ไม่มีอยู่ในAmazon Route 53นอกกรอบฉันขอแนะนำให้ตรวจสอบวิธีแก้ปัญหาทางอ้อมอย่างชาญฉลาดของ Vivek M. Chawla ผ่านทางAmazon S3 รองรับเว็บไซต์เปลี่ยนเส้นทางและรับเซิร์ฟเวอร์ที่มีอยู่ในตัวเองให้น้อยลงและโซลูชันฟรีภายใน AWS ก็เป็นเช่นนั้น

  • การใช้โซลูชันอัตโนมัติเพื่อสร้างการเปลี่ยนเส้นทางดังกล่าวนั้นยังคงเป็นแบบฝึกหัดสำหรับผู้อ่าน แต่โปรดจ่ายส่วยให้คำตอบที่ยิ่งใหญ่ของ Vivek โดยการเผยแพร่โซลูชันของคุณ;)

คำตอบเดิม

Nettica ต้องใช้งานโซลูชันการเปลี่ยนเส้นทางที่กำหนดเองสำหรับสิ่งนี้นี่คือปัญหา:

คุณสามารถสร้างนามแฝง CNAME เช่นaws.example.comสำหรับmyaccount.signin.aws.amazon.comอย่างไร DNS ไม่ได้ให้การสนับสนุนอย่างเป็นทางการสำหรับ aliasing ไดเรกทอรีย่อยเช่นconsoleในตัวอย่างนี้

  • เป็นเรื่องที่น่าเสียดายที่ AWS ไม่ได้ทำอย่างนี้โดยปริยายเมื่อกดปุ่มhttps://myaccount.signin.aws.amazon.com/(ฉันเพิ่งลอง) เพราะมันจะช่วยแก้ปัญหาของคุณได้ทันทีและทำให้เข้าใจได้ตั้งแต่แรก นอกจากนี้ควรง่ายต่อการกำหนดค่าในตอนท้ายของพวกเขา

ด้วยเหตุนี้ผู้ให้บริการ DNS บางรายจึงใช้โซลูชันที่กำหนดเองเพื่ออนุญาตการเปลี่ยนเส้นทางไปยังไดเรกทอรีย่อย ฉันคาดเดาว่าพวกเขาจะอำนวยความสะดวกให้กับชื่อแทน CNAME สำหรับโดเมนของพวกเขาเองและกำลังเปลี่ยนเส้นทางอีกครั้งจากที่นั่นไปยังปลายทางสุดท้ายผ่านการเปลี่ยนเส้นทาง HTTP 3xxทันที

ดังนั้นเพื่อให้ได้ผลลัพธ์เดียวกันคุณจะต้องมีบริการ HTTP ที่ดำเนินการเปลี่ยนเส้นทางเหล่านี้ซึ่งไม่ใช่วิธีแก้ปัญหาง่ายๆที่เราคาดหวัง บางที / หวังว่าบางคนสามารถคิดหาวิธีที่ชาญฉลาดขึ้นได้


3
CNAME เป็นชื่อแทนและไม่เปลี่ยนเส้นทาง
ejain

@ejain - คุณถูกต้องฉันได้แก้ไขแล้ว (ต้องพลาดการแจ้งเตือนไปก่อน); ขอบคุณสำหรับการชี้ให้เห็นประโยคที่อาจทำให้เข้าใจผิดนี้!
Steffen Opel

0

หากคุณยังคงมีปัญหากับวิธีการง่ายๆให้สร้างที่ฝากข้อมูลว่างเปล่าจากนั้นRedirect all requests to another host nameภายใต้เว็บโฮสติ้งแบบคงที่ในคุณสมบัติผ่านคอนโซล ตรวจสอบให้แน่ใจว่าคุณได้ตั้งระเบียน A 2 ใน route53 หนึ่งและหนึ่งสำหรับfinal-destination.com redirect-to.final-destination.comการตั้งค่าสำหรับแต่ละรายการจะเหมือนกัน แต่ชื่อจะแตกต่างกันดังนั้นจึงตรงกับชื่อที่คุณตั้งไว้สำหรับที่เก็บข้อมูล / URL ของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.