การทดสอบความสามารถของเซิร์ฟเวอร์ในการให้บริการโดเมนเฉพาะ


11

สมมติว่าคุณได้ตั้งค่ากับที่คุณชื่นชอบเว็บเซิร์ฟเวอร์-ภูตที่จะให้บริการServer A ตอนนี้คุณต้องการที่จะย้ายไปนี้www.example.com Server Bหลังจากทำการคัดลอกและกำหนดค่าเครือข่ายใหม่ดูเหมือนว่าจะพร้อม การทดสอบขั้นสุดท้ายจะเป็นไปตามลำดับ: ก่อนที่จะเปลี่ยนระเบียน DNS หนึ่งจะขอwww.example.comจากเซิร์ฟเวอร์ B เมื่อระเบียน DNS ยังคงชี้ไปที่เซิร์ฟเวอร์ A ได้อย่างไร


ในขณะที่คำถามหลักของฉันได้รับการตอบรับในกรณีที่ / etc / hosts ไม่อยู่ภายใต้อิทธิพลของฉันมันเป็นไปได้ไหมที่จะทดสอบด้วย telnet โดยแทนที่จะพูด HTTP1.1 ดิบกับเว็บเซิร์ฟเวอร์แทน


8
โปรดอย่าแก้ไขคำถามของคุณเพื่อถามคำถามใหม่อย่างสมบูรณ์ มันมีแนวโน้มที่จะ (ค่อนข้าง) ทำให้คำตอบที่มีอยู่เป็นโมฆะและแพลตฟอร์มจะไม่ส่งการแจ้งเตือนว่าคำถามมีการเปลี่ยนแปลงอย่างใดอย่างหนึ่งทำให้ไม่น่าเป็นไปได้ที่ผู้คนที่เกี่ยวข้องกับคำถามของคุณจะกลับมาคำตอบของพวกเขาอีกครั้ง คุณสามารถแสดงความคิดเห็นโดยตรงกับพวกเขาว่าคุณมีคำถามติดตาม บ่อยครั้งที่กลยุทธ์ที่ดีกว่าคือถามคำถามใหม่ (อาจชี้ไปที่คำถาม & คำตอบก่อนหน้านี้) แทน
HBruijn

2
พิจารณาการลงคะแนนสูงเพียงเพื่อการเปลี่ยนเสาประตูที่สมบูรณ์พร้อมการแก้ไข > _ <
Wesley

คำตอบ:


12

DNS เป็นสิ่งมหัศจรรย์ ที่มีการควบคุมเพียงพอมากกว่าเครื่องคอมพิวเตอร์ของลูกค้าที่คุณสามารถทำให้right.comเข้าและwrong.com viceversa.ioกระโดดขึ้นไปบนเครื่องคอมพิวเตอร์ของลูกค้าทดสอบและโคลนที่มีความละเอียดของ DNS โดยทั้งเปลี่ยนไฟล์โฮสต์บนไคลเอนต์ที่หรือคุณสามารถทำสิ่งที่เป็นบิตที่ซับซ้อนมากขึ้นและให้โฮสต์ที่เซิร์ฟเวอร์ DNS dnsmasqที่ง่ายต่อการสอบถามเช่น เป้าหมายสูงสุดคือการตอบสนอง DNS สำหรับการสอบถามที่เกี่ยวข้องกับการwww.example.comตอบสนองกับที่อยู่ IP สำหรับเซิร์ฟเวอร์ B. ส่วนหัวโฮสต์ HTTP นั้นจะมีชื่อ DNS สำหรับ www.example.com แต่มุ่งไปที่ เซิร์ฟเวอร์ B.

มายากล!


3
อย่างใด/etc/hostsไม่ได้เกิดขึ้นกับฉันและสิ่งนี้ทำงานได้อย่างสมบูรณ์ ไชโยสำหรับการเตือน!
Jarmund

2
hostsไฟล์ไม่ได้มีส่วนร่วมในการแก้ปัญหา DNSแต่เป็นกลไกชื่อแยกการค้นหาที่ห้องสมุดจำแนกที่มีให้โดย OS ลูกค้าพฤษภาคมและในกรณีส่วนใหญ่จะใช้ในการนอกเหนือไปจากการค้นหาใน DNS โดยส่วนตัวแล้วฉันคิดว่า "มันวิเศษ" เพียงแค่ดึงเข้าสู่ "ไม่จำเป็นต้องเข้าใจ" ซึ่งแน่นอนว่าเป็นสิ่งที่ไม่ดีสำหรับมืออาชีพ
Håkan Lindqvist

@ HåkanLindqvistคุณเข้าใจผิดอย่างมากในบริบทและการใช้วลี
Wesley

ในกรณีใด ๆไฟล์โฮสต์ ≠ DNS นี่คือ SF; ฉันคาดหวังให้ผู้คนที่นี่ทุกที่รู้ถึงความแตกต่าง
Ilmari Karonen

@IlmariKaronen และฉันไม่ได้บอกว่าไฟล์โฮสต์เป็น DNS ดังนั้นความคาดหวังของคุณสำหรับ ServerFault จึงเป็นไปตามที่เราคาดหวังไว้! ᕕ (ᐛ) ᕗ
Wesley

11

สิ่งสำคัญคือต้องทราบว่าสิ่งที่สำคัญที่ต้องทำการทดสอบเช่นนี้สำหรับ HTTP นั้นไม่เกี่ยวข้องกับ DNS เลย แต่สิ่งที่ไคลเอ็นต์ HTTP ส่งเป็นHostค่าส่วนหัว

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


สำหรับการทดสอบอย่างรวดเร็วสามารถใช้คำสั่งต่อไปนี้โดยไม่มีการเปลี่ยนแปลงการกำหนดค่าระดับระบบปฏิบัติการใด ๆ บนไคลเอ็นต์:

$ curl -H "Host: www.example.com" http://192.0.2.17/foo/bar

หรือสำหรับเรื่องนั้น

$ curl -H "Host: www.example.com" http://beta.example.com/foo/bar


หากต้องการทำเช่นเดียวกันกับเว็บเบราว์เซอร์ทั่วไปคุณจะต้องมีส่วนขยายเบราว์เซอร์ที่สามารถแก้ไขส่วนหัวคำขอ (หรืออาจเป็น HTTP พร็อกซีที่เปลี่ยนส่วนหัว) หรือคุณจะต้องเปลี่ยนการกำหนดค่าของระบบปฏิบัติการเครื่องไคลเอนต์

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

ตัวเลือกอื่น ๆ ได้แก่ การเปลี่ยนเซิร์ฟเวอร์ตัวแก้ไข DNS ที่กำหนดค่าบนไคลเอนต์เป็นเนมเซิร์ฟเวอร์ซึ่งตั้งค่าให้ตอบได้ตามต้องการ


1
+1 สำหรับวิธีการแก้ปัญหาที่ไม่เกี่ยวข้องกับการแก้ไขปัญหาด้วยชื่อ
Jarmund

2
ล่าสุดcurlช่วยให้คุณสามารถแทนที่การจำแนกชื่อปกติ (DNS หรือ hostfile) และยังคงทำส่วนหัวโดยอัตโนมัติและ SNI หากใช้ / ทดสอบ httpS ดู--resolveใน manpage ของคุณหรือที่curl.haxx.se/docs/manpage.html
dave_thompson_085

4

telnetคุณสามารถทดสอบนี้กับ คุณต้องทำการร้องขอ HTTP raw โดยการพิมพ์คำสั่ง คุณไม่สามารถทำผิดพลาดได้และบางเซิร์ฟเวอร์มีการหมดเวลาดังนั้นคุณต้องพิมพ์คำขอทั้งหมดภายในกรอบเวลานั้น

คำสั่งจะเป็นดังนี้:

telnet serverb 80

คำขอจะมีลักษณะดังนี้:

GET / HTTP/1.1
Host: www.example.com

โปรดทราบว่ามันจะต้องลงท้ายด้วยบรรทัดว่างดังนั้นคุณจึงกด Enter สองครั้งหลังจากส่วนหัวของโฮสต์


1
nitpick: ในขณะที่ส่วนหัว HTTP ไม่ควรจะเป็นกรณีที่มีความอ่อนไหวที่กฎเกณฑ์Hostส่วนหัวไม่ได้ทั้งหมดหมวก (และเห็นได้ชัดว่าเซิร์ฟเวอร์บางเครื่องอาจมีปัญหากับตัวพิมพ์ใหญ่ที่แตกต่างกัน)
Bob

@Bob จริง, แก้ไขแล้ว
นักเทศน์

3

สิ่งที่ฉันมักจะทำคือบังคับให้ www.example.com ไปยังที่อยู่ IP ของเซิร์ฟเวอร์ B ใน / etc / hosts ของฉัน ฉันทำอย่างนั้นตั้งแต่ฉันใช้โมเสกและเมื่อฉันทำมันนาน ๆ ครั้งฉันก็ไม่รู้สึกว่าจำเป็นต้องหาสิ่งที่ดีกว่า

เมื่อมองไปรอบ ๆ คุณฉันพบ/superuser/403042/custom-host-file-for-firefoxซึ่งตอบโดยhttps://addons.mozilla.org/es/firefox/addon/ foxyproxy-standard /แต่มีข้อความล่าสุดที่บอกว่ามันถูกทอดทิ้ง


ตอบสนองต่อการแก้ไขของคุณถามวิธีการทดสอบโดยไม่ต้อง / etc / hosts ใช่ว่ามีอยู่ มันอาจเป็นได้ทั้ง telnet สำหรับการทดสอบขั้นพื้นฐานส่วนเสริมเช่นที่ฉันกล่าวถึงในคำตอบของฉันข้างต้นหรือพร็อกซีที่กำหนดค่าเองหรือ (และนี่คือวิธีที่ฉันต้องการ) ServerAlias ​​บนเซิร์ฟเวอร์ B ของ www2.example ดอทคอม
Law29

3

หากคุณจำเป็นต้องตรวจสอบการทำงานผมแนะนำ broswer ง่ายเช่นปลั๊กอินModify Headersสำหรับ Firefox และเปลี่ยนไปHOSTwww.mydomain.com

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