การใช้หมายเลขพอร์ตในไฟล์โฮสต์ Windows


190

หลังจากติดตั้ง TeamViewer ฉันได้เปลี่ยนพอร์ต wampserver เป็น 8080 ดังนั้นที่อยู่คือ http://localhost:8080.

สำหรับไฟล์โฮสต์ที่อยู่ที่ C: \ WINDOWS \ system32 \ drivers \ etc \ ฉันได้ทำการเปลี่ยนแปลงดังต่อไปนี้

ก่อน
127.0.0.1 www.example.com

หลังจาก
127.0.0.1:8080 www.example.com

เมื่อฉันเข้าสู่ www.example.com มันจะไม่เปลี่ยนเส้นทางไปยังผู้บันทึกของฉันฉันจะแก้ไขได้อย่างไร


คุณต้องใช้เซิร์ฟเวอร์ NGNIX หรือ Apache HTTP เป็นพร็อกซีเซิร์ฟเวอร์สำหรับการส่งต่อคำร้องขอ http ไปยังแอปพลิเคชันที่เหมาะสม -> ซึ่งรับฟังพอร์ตเฉพาะ (หรือทำกับ CNAME ที่ให้บริการโฮสติ้ง)
Musa


อาจทบทวนและเปลี่ยนคำตอบที่ยอมรับเป็นคำตอบของ netsh หรือไม่ ฉันลงเอยที่นี่เมื่อพยายามหาวิธีจับคู่โดเมน. กับภาพนักเทียบท่าของฉันใน Windows 10 และคำตอบจาก netsh นั้นทำงานได้อย่างมีเสน่ห์!
Jereme

คำถามคือคุณพยายามเปลี่ยนโฮสต์ทั้งหมดไปยังพอร์ตเดียว (?!) หรือเพียงแค่พอร์ต 80 (ของโฮสต์นั้น) ไปยังพอร์ต 8080 หรือไม่ คำตอบส่วนใหญ่อยู่ที่วิธีการเปลี่ยนเส้นทาง (หรืออย่างน้อยพยายามเปลี่ยนเส้นทาง ... ;-) พอร์ต 80 ของโฮสต์ไปยังพอร์ต 8080 ของ "localhost" ของคุณ ตัวอย่าง: https://www.example.comต้องไปที่พอร์ต 8080 หรือไม่ หรือ 443 เริ่มต้น (ตามควร) ซึ่งหมายความว่า: คุณต้องการให้ https เปลี่ยนเส้นทางไปยังพอร์ต 8080 ของโลคัลโฮสต์ของคุณหรือไม่ หรือคุณไม่สนใจเลยว่าจะเปลี่ยนเส้นทางจากที่ใด
ilias iliadis

คำตอบ:


195

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

ดังนั้นใช้บุ๊กมาร์กหรืออะไรทำนองนั้น
(ซอฟต์แวร์ไฟร์วอลล์ / การกำหนดเส้นทางบางอย่างอาจอนุญาตการเปลี่ยนเส้นทางพอร์ตขาออก แต่นั่นไม่ได้ฟังดูเหมือนตัวเลือกที่น่าสนใจสำหรับสิ่งนี้)


6
วิธีใช้บุ๊คมาร์คคุณช่วยพาเราไปที่ลิงค์หรือเอกสารหรือแบบฝึกหัดเกี่ยวกับเรื่องนี้ได้อย่างไร
adham dwikat

@ Jereme: คุณควรบอกกับทาง OP ฉันไม่สามารถทำอะไรกับมันได้เลย
Mat

1
@ แมทน่าจะใช่มั้ย ฉันแค่ต้องการให้คนอื่นที่เห็นสิ่งนี้รู้เพื่อเลื่อนลงมาเล็กน้อยและให้ช็อต ฉันลงเอยที่นี่เมื่อพยายามหาวิธีจับคู่โดเมน. กับภาพนักเทียบท่าของฉันใน Windows 10 และคำตอบจาก netsh นั้นทำงานได้อย่างมีเสน่ห์!
Jereme

170

สิ่งที่คุณต้องการสามารถทำได้โดยการปรับเปลี่ยนไฟล์โฮสต์ผ่านแอพพลิเคชั่นFiddler 2

ทำตามขั้นตอนเหล่านี้:

  1. ติดตั้งFiddler2

  2. ไปที่เมนู Fiddler2: - เครื่องมือ > โฮสต์ .. (คลิกเพื่อเลือก)

  3. เพิ่มบรรทัดดังนี้: -

    localhost:8080 www.mydomainname.com

  4. บันทึกไฟล์แล้วเช็คเอาต์www.mydomainname.comในเบราว์เซอร์


34
นี่เป็นทางออกที่ไม่ดี คุณต้องมีพู้ทำเล่นทำงานอยู่ตลอดเวลา
James Huckabone

49
@JamesHuckabone: คุณมีทางออกที่ดีกว่าไหม? เราชอบที่!
Rajat Gupta

16
ฉันได้รับ Error 400 Bad Request เมื่อฉันใช้วิธีนี้
Sam

3
ดูเหมือนว่าจะไม่ทำงานอีกต่อไป ลองใช้ทั้ง fiddler2 และ fiddler4
basher

1
@basher U ยังคงสามารถสคริปต์ได้ที่ Fiddler's Rules.js อย่างแน่นอน การใช้งานฟังก์ชั่นโฮสต์บน Fiddler ไม่ใช่ไฟล์โฮสต์ของ Windows แต่เป็นชื่อที่คุ้นเคยเพื่อให้ง่ายต่อการใช้งาน เป็นเหมือน Autoresponders เป็นเพียงส่วนย่อยของสิ่งที่คุณสามารถทำสคริปต์ได้โดยตรง หากคุณไม่สามารถทำอะไรบางอย่างกับเมนูสคริปต์มัน
m3nda

159

ฉันจัดการเพื่อให้บรรลุนี้โดยใช้ของ Windows รวมnetshเครื่องมือเครือข่าย

ดังที่ Mat ชี้ให้เห็น: ไฟล์ hosts นั้นใช้สำหรับการแก้ปัญหาชื่อโฮสต์เท่านั้นดังนั้นการรวมกันของทั้งสองจึงใช้กลอุบายของฉัน

ตัวอย่าง


ภาพรวม

example.app:80
 |                           <--Link by Hosts File
 +--> 127.65.43.21:80
       |                     <--Link by netsh Utility
       +--> localhost:8081

การปฏิบัติ

  • เริ่มต้นเซิร์ฟเวอร์ของฉันใน localhost:8081
  • เพิ่ม "local DNS" ของฉันในไฟล์โฮสต์เป็นบรรทัดใหม่
    • 127.65.43.21 example.app
      • ที่อยู่ฟรีใด ๆ ในเครือข่าย127.0.0.0/8( 127.x.x.x) สามารถใช้ได้
      • หมายเหตุ:ฉันสมมติว่า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


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


มันไม่ทำงานสำหรับฉัน ในลิงก์ที่คุณแสดงมันบอกว่า "คุณไม่สามารถใช้ 127.0.0.1 เป็น connectaddress ได้"
Don Box

@ DonBox: หากคุณให้รายละเอียดเพิ่มเติมเกี่ยวกับการตั้งค่าของคุณบางทีฉันอาจช่วยคุณได้ การใช้127.0.0.1เป็นที่อยู่การเชื่อมต่อนั้นเป็นความต้องการโดยทั่วไปในสถานการณ์กรณีที่นำเสนอเพราะเซิร์ฟเวอร์เริ่มต้นที่localhostเช่นเดียวกับโปรแกรมอื่น ๆ ที่เป็นค่าเริ่มต้น หากคุณสามารถเริ่มต้นที่ที่อยู่อื่นที่คุณไม่ต้องการกลไกการส่งต่อพอร์ตทั้งหมดคุณเพียงแค่ต้องปรับเปลี่ยนไฟล์โฮสต์ ... บางทีตามรายละเอียดที่นี่คุณยังไม่ได้ติดตั้งโปรโตคอล ipv6 : ใช้คำสั่งต่อไปนี้เพื่อติดตั้ง พวกเขา:netsh interface ipv6 install
Pau Coma Ramirez

13
นี่ควรเป็นคำตอบที่ได้รับการยอมรับเนื่องจากมีการติดตั้งเครื่องมือใน Windows 10 พื้นฐานของฉันแล้วและนี่ก็เป็นสิ่งที่ฉันต้องการ ฉันกำลังพิจารณาติดตั้ง apache และ mod_proxy แต่นี่เป็นทางออกที่ดีกว่ามาก
Max Young

2
ไม่ได้ผลสำหรับฉัน Netsh ดูเหมือนจะส่งต่อที่อยู่ แต่ไม่ใช่พอร์ต
steph643

2
ฉันใช้ตัวเทียบท่าของนักเทียบท่า มันใช้ localhost บนพอร์ต 9000 การแก้ไขคำสั่งด้านบนฉันใช้ portainer.local โดยไม่ต้องระบุพอร์ตบนที่อยู่ ฉันก่อนเพิ่ม127.0.0.1เป็นที่อยู่ที่จะจับคู่portainer.localในไฟล์โฮสต์ของฉัน จากนั้นฉันก็รัน: netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.0.0.1 connectport=9000 connectaddress=127.0.0.1 กดปุ่มป้อนใน cmd / powershell เพื่อเรียกใช้ หลังจากนี้ netsh exitทางออกโดยการพิมพ์ ในเบราว์เซอร์การพิมพ์http://portainer.localจะพาฉันไปยังที่ที่http://localhost:9000เคยใช้ สิ่งนี้ได้ผลเหมือนมนต์เสน่ห์สำหรับฉัน
EffectiX

14

Fiddler2 -> กฎ -> กฎที่กำหนดเอง

จากนั้นหาฟังก์ชั่น OnBeforeRequest ที่ใส่ในสคริปต์ต่อไปในตอนท้าย:

if (oSession.HostnameIs("mysite.com")){
    oSession.host="localhost:39901";
}

Fiddler มีประสิทธิภาพมากเกินกว่าที่จะคาดการณ์ว่าจะไม่เรียกใช้เว็บเซิร์ฟเวอร์บนพอร์ต 80 หรือแม้แต่ Skype ... บน Windows ทำงานได้ดีกว่าใน Linux ด้วย Mono อย่างน้อยคุณสมบัติการถ่ายภาพ cuz Linux ไม่ใช้ Inet จาก CLRL นี่เป็นวิธีที่ดีกว่าในการทำสิ่งต่าง ๆ บน Fiddler เพราะมันสามารถส่งออกได้ 1 ไฟล์
m3nda

3

วิธีที่ง่ายที่สุดคือใช้ Ergo เป็น reverse proxy ของคุณ: https://github.com/cristianoliveira/ergo

คุณตั้งค่าบริการของคุณและ IP: PORT และ Ergo เส้นทางให้คุณ :)

คุณสามารถใช้งานได้เหมือนกันnginxหรือapacheแต่คุณจะต้องกำหนดค่า


4
Ergo ดูเหมือนจะเป็นโครงการที่คุณทำงาน (ขึ้นอยู่กับชื่อผู้ใช้) หากเป็นกรณีนี้คุณควรระบุให้ชัดเจนยิ่งขึ้นว่าคุณมีส่วนเกี่ยวข้องกับผลิตภัณฑ์นั้น ดูคำตอบนี้เช่นเดียวกับคำตอบอื่น ๆ
Frank Tan

2

- คุณสามารถใช้ที่อยู่ฟรีใด ๆ ในเครือข่าย 127.0.0.0/8 ในกรณีของฉันจำเป็นต้องใช้สำหรับขวดหลามและนี่คือสิ่งที่ฉันได้ทำ: เพิ่มบรรทัดนี้ในไฟล์โฮสต์ (คุณสามารถหามันเป็นหน้าต่างภายใต้: C: \ Windows \ System32 \ drivers \ etc):

127.0.0.5 flask.dev
  • ตรวจสอบให้แน่ใจว่าพอร์ตนั้นเป็นพอร์ตเริ่มต้น "80" ในกรณีของฉันนี่คือสิ่งที่อยู่ในขวดหลาม: app.run("127.0.0.5","80")

  • ตอนนี้เรียกใช้รหัสของคุณและเรียกดู flask.dev


1

หากสิ่งที่เกิดขึ้นคือคุณมีเซิร์ฟเวอร์อื่นที่ทำงานบน localhost และคุณต้องการให้ชื่อโฮสต์ท้องถิ่นอื่น ๆ ในเซิร์ฟเวอร์นี้เหมือนกัน http://teamviewer/

ฉันคิดว่าสิ่งที่คุณกำลังมองหาคือฟังก์ชั่นโฮสต์เสมือนจริง ฉันใช้ Apache ดังนั้นฉันจึงไม่ทราบว่าเว็บ daemons อื่นรองรับได้อย่างไร อาจเรียกว่านามแฝง นี่คือเอกสาร Apache:

Apache Virtual Hosts ตัวอย่าง


1

ใช้ netsh กับ connectaddress = 127.0.0.1 ไม่ได้ผลสำหรับฉัน

แม้จะมองทุกที่บนอินเทอร์เน็ตฉันไม่สามารถหาทางออกที่แก้ปัญหานี้ให้ฉันได้ซึ่งก็คือการใช้ connectaddress = 127.xxx (เช่นที่อยู่ใด ๆ 127. ที่อยู่ ipv4 ไม่ใช่ 127.0.0.1) เนื่องจากดูเหมือนว่าลิงก์กลับไปยัง localhost เพียง เหมือนกัน แต่ไม่มีข้อ จำกัด เพื่อให้ลูปแบ็คทำงานในเน็ต


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


0

คุณต้องใช้เซิร์ฟเวอร์ NGNIX หรือ Apache HTTP เป็นพร็อกซีเซิร์ฟเวอร์สำหรับการส่งต่อคำขอ HTTP ไปยังแอปพลิเคชันที่เหมาะสม -> ซึ่งรับฟังพอร์ตเฉพาะ (หรือทำกับ CNAME ซึ่งเป็น บริษัท โฮสติ้ง) มันเป็นโซลูชั่นที่ทรงพลังที่สุดและนี่เป็นวิธีที่ง่ายมากในการเพิ่มโดเมนย่อยใหม่ ๆ หรือเพิ่มโดเมนใหม่โดยอัตโนมัติเมื่อมีการชี้ระเบียน DNS ที่เซิร์ฟเวอร์

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