ฉันสามารถกำหนดค่าไฟล์โฮสต์ Windows ให้ใช้ที่อยู่ IP และพอร์ตได้หรือไม่


13

ฉันต้องการกำหนดค่าไฟล์โฮสต์ Windows เพื่อส่งคำขอโฮสต์ตามที่อยู่ IP + พอร์ต

ตัวอย่างเช่น:

127.0.0.1:80       www.site1.com
127.0.0.1:8080     www.sitetwo.com

เพราะฉันมี Apache ฟังพอร์ต 8080 และ IIS บนพอร์ต 80 (ค่าเริ่มต้น)

ดังนั้นฉันคิดว่าวิธีที่ดีที่สุดในการทำเช่นนี้คือการแก้ไขhostsไฟล์ มันไม่ได้ส่งผลกระทบอะไรเลย ฉันไม่ได้รับข้อผิดพลาดหรือข้อความใด ๆ


1
คุณจะได้รับคำตอบที่ดีกว่าเมื่อถามคำถามแบบนี้ในserverfault.com
Carl Norum

ทำไมคุณไม่เปิดตัวsite1.com (: 80)และsitetwo.com:8080ในเบราว์เซอร์ของคุณ?
วาน

คำตอบ:


11

คุณทำไม่ได้ ไฟล์โฮสต์นั้น - โฮสต์ มันเทียบเท่ากับ DNS "ลัดวงจร" ภายในเครื่องของคุณ DNS ไม่สามารถส่งคุณไปยังพอร์ตได้เช่นกัน

เพื่อให้บรรลุสิ่งที่คุณพยายามทำคุณจะต้องตั้งค่าโฮสต์เสมือนภายใต้ IIS หรือ Apache และใช้ (โดยใช้ส่วนหัว HTTP Host: ส่วนหัว) เพื่อให้บริการตัดสินใจว่าจะนำเสนอเว็บไซต์ใด สิ่งนี้จะไม่ช่วยคุณหากคุณต้องการทำเช่นนี้กับ IIS และ Apache พร้อมกัน


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

4
  • hostsไฟล์สำหรับการจำแนกชื่อโฮสต์เท่านั้น
  • เบราว์เซอร์ในกรณีที่ไม่มีการระบุโดยตรงพอร์ต: IE <hostname>:<port>, ค่าเริ่มต้นไปยังท่าเรือ80

สถานการณ์ปัญหาทั่วไป

  1. การใช้งานมักจะตั้งเซิร์ฟเวอร์ของพวกเขาไปยังที่อยู่ IP เริ่มต้นเดียวกัน127.0.0.1อาคา(ที่กำหนดไว้ในไฟล์โฮสต์)localhost
  2. เพื่อหลีกเลี่ยงการชนกันระหว่างเซิร์ฟเวอร์ที่มีอยู่ / ที่ใช้งานอยู่อื่น ๆ โดยทั่วไปแอปพลิเคชันจะอนุญาตให้คุณเปลี่ยนพอร์ต แต่ไม่ใช่ที่อยู่ IP

    2a หากคุณสามารถเปลี่ยนที่อยู่ ip ของเซิร์ฟเวอร์เป็นที่อยู่อื่นในพื้นที่ที่อยู่สำรองที่สำรอง 127.0.0.0/8แล้วคุณอาจจะไม่พยายามตั้งค่าพอร์ตในไฟล์โฮสต์

ทางออกที่เป็นไปได้

คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยใช้เครื่องมือWindows ที่มีระบบเครือข่ายnetshเป็นพอร์ตพร็อกซี่


ภาพรวม

example.app
 |                               <--browser defaults to port 80
 +--> example.app:80
       |                         <--Hostname resolution by Hosts File
       +--> 127.65.43.21:80      
             |                   <--Link by netsh Utility
             +--> 127.0.0.1:8081

การปฏิบัติ

  • เริ่มต้นเซิร์ฟเวอร์ของคุณ localhost:8081
  • เพิ่ม "local DNS" ในไฟล์โฮสต์เป็นบรรทัดใหม่
    • 127.65.43.21 example.app
      • ที่อยู่ฟรีใด ๆ ในเครือข่าย127.0.0.0/8สามารถใช้ได้
      • หมายเหตุ:ฉันสมมติ127.65.43.21:80ว่าไม่ได้ใช้บริการอื่น
      • คุณสามารถตรวจสอบกับ netstat -a -n -p TCP | grep "LISTENING"
  • เพิ่มการกำหนดค่าเครือข่ายต่อไปนี้ด้วยยูทิลิตี คำสั่ง netsh
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • เข้าถึงเซิร์ฟเวอร์ที่ http://example.app

หมายเหตุ:
- คำสั่ง / การแก้ไขไฟล์เหล่านี้จะต้องดำเนินการด้วยสิทธิ์ผู้ดูแลระบบ

- netsh portproxy ต้องการไลบรารี่ ipv6เพียงเพื่อใช้ v4tov4 โดยปกติแล้วพวกเขาจะถูกรวมไว้โดยค่าเริ่มต้นมิฉะนั้นติดตั้งพวกเขาโดยใช้คำสั่งต่อไปนี้:netsh interface ipv6 install


คุณสามารถดูรายการที่คุณเพิ่มด้วยคำสั่ง:

netsh interface portproxy show v4tov4

คุณสามารถลบรายการด้วยคำสั่งต่อไปนี้:

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


ลิงค์ไปยังแหล่งข้อมูล:

หมายเหตุ: คำตอบนี้ซ้ำคำตอบของฉันกล่าวถึงในคำถาม / คำตอบที่คล้ายกันนี้ใน stackoverflow


นี่คือคำตอบที่ดี ... ขอบคุณสำหรับลิงค์ทรัพยากร!
Eric Hepperle - CodeSlayer2010

3

ไม่คุณไม่สามารถ ถ้ามันไม่ทำงานก็มีบางอย่างผิดปกติ

127.0.0.1 site.com
127.0.0.1 www.site.com

ฉันคิดว่านี่สำหรับกล่องการพัฒนาหรือไม่?

DNS จะแก้ไข site.com และ www.site.com เป็น localhost ตราบใดที่คุณไม่ได้ทำอะไรบางอย่างเช่นการสอบถาม DNS ของคุณ คุณควรสอบถามที่ ServerFault เพื่อขอความช่วยเหลือในการกำหนดค่าเว็บเซิร์ฟเวอร์ซึ่งเป็นปัญหาที่น่าเป็นไปได้มากที่สุด


ขอบคุณสำหรับความช่วยเหลือ !!! แต่ไม่มีทาง ??? จากนั้นฉันจะรัน iis และ apache คล้ายคลึงกับพอร์ตอื่นได้อย่างไร

พวกเขากำลังจะไปยังที่อยู่เดียวกันพอร์ตไม่ได้คำนึงถึงสิ่งที่โฮสต์ทำ พอร์ตจะยังใช้งานได้คุณสามารถเรียกใช้พอร์ตขนาน
Xorlev

3

คุณสามารถทำกับไวโอลิน ด้วยสคริปต์ Fiddlerคุณสามารถทำสิ่งที่น่าอัศจรรย์มากมาย

หากคุณตั้งค่าโฮสต์เช่นนี้

127.0.0.1     www.site1.com    # Port 80
127.0.0.1     www.sitetwo.com  # Port 8080

เพิ่มในCustomRules.js (หากต้องการเปิดCustomRules.jsเลือกกำหนดกฎเองในเมนูกฎของ Fiddler )

// this method is already exist
static function OnBeforeRequest(oSession: Session) {  
    if (oSession.host.toLowerCase() == "www.sitetwo.com") 
        oSession.host = "www.sitetwo.com:8080";
    ...
}

จากนั้นพู้ทำเล่นแปลงโฮสต์และคุณจะเชื่อมต่อกับพอร์ต 8080


คุณตระหนักถึงทางเลือกโอเพนซอร์ซ (james, owasp zap หรืออื่น ๆ ) ที่สามารถใช้กับเอฟเฟกต์เดียวกันได้หรือไม่?
Marc.2377

1

คุณใช้เซิร์ฟเวอร์เพื่อการพัฒนาท้องถิ่นหรือไม่ ถ้าเป็นเช่นนั้นคุณสามารถทำให้ Apache ของคุณฟัง 127.0.0.2:80 และเปลี่ยนเส้นทางที่มีไฟล์โฮสต์ไปยังชื่อโดเมนที่คุณต้องการ


0

เช่นเดียวกับไฟล์โฮสต์ของคำตอบอื่น ๆ ที่ไม่มีข้อมูลพอร์ต แต่คุณสามารถมีหน้าเว็บที่เปลี่ยนทิศทางลำเอียงตามส่วนหัวเช่น apache หรือ IIS จะทำสำหรับชื่อโฮสต์เสมือนจริง ตรวจสอบส่วนหัวและเปลี่ยนเส้นทางตามต้องการ อย่างไรก็ตามฉันไม่เห็นคุณค่าของสิ่งนี้ในขณะที่คุณกำลังปรับปรุงล้อ Apache รองรับการโฮสต์เสมือนบนพอร์ตและฉันคิดว่า iis ทำ

เป็นเป้าหมายของคุณที่จะมีเครื่องพัฒนาที่มีทั้งการทำงานของเราคือสิ่งนี้สำหรับสถานการณ์การผลิต



-1

นี่คือสิ่งที่คุณสามารถทำได้มันจะเป็นประโยชน์สำหรับการพัฒนาท้องถิ่นเท่านั้น

ไฟล์โฮสต์:

  • 127.0.0.1 local.site1.com
  • 127.0.0.1 local.site2.com

ใน IIS ให้สร้างเว็บไซต์ใหม่และสำหรับ local.site1.com & local.site2.com

การตั้งค่า IIS

  • ที่อยู่ IP: ไม่ได้กำหนดทั้งหมด (มันจะใช้โฮสต์ท้องถิ่นหรือ ip อื่น ๆ ที่มี)
  • พอร์ต: อื่น ๆ นอกเหนือจากที่ใช้อยู่แล้ว (81,82,83 และอื่น ๆ 80 มีการใช้งานแล้วโดยเว็บไซต์เริ่มต้น)
  • ชื่อโฮสต์: เว้นว่างไว้

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

หลังจากนี้คุณสามารถใช้ URL ต่อไปนี้เพื่อเข้าถึงเว็บไซต์จากเครื่องท้องถิ่นหรือจาก LAN

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