รันเซิร์ฟเวอร์หลายเครื่องบนพอร์ตเดียวกัน


19

ฉันต้องการเรียกใช้เซิร์ฟเวอร์ XAMPP และเซิร์ฟเวอร์ Nodejs ที่พอร์ต 80

หากเซิร์ฟเวอร์ได้รับคำขอ HTTP ดังนั้น XAMPP จะจัดการกับมันหากเซิร์ฟเวอร์ได้รับคำขอ Websocket จากนั้น Nodejs

มันเป็นไปได้ยังไงกัน? หากมีการใช้พอร์ตอยู่แล้วฉันจะไม่สามารถเริ่มโปรแกรมเซิร์ฟเวอร์อื่นได้

คำตอบ:


45

คุณจะต้องใช้ reverse proxy เพื่อทำเช่น Apache 2.4 กับmod_proxy_wstunnel

ใช้เป็นส่วนหน้าและจากนั้นทำการเชื่อมต่อกับแบ็กเอนด์ที่เหมาะสม


22

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

เพื่อให้บรรลุสิ่งที่คุณต้องการคุณจะต้องใช้reverse proxyซึ่งจะฟังพอร์ต 80 และส่งต่อการรับส่งข้อมูลไปยังปลายทางที่ถูกต้อง มีหลายวิธีในการทำเช่นนี้ ตัวอย่างเช่นคุณสามารถตั้งค่าเว็บเซิร์ฟเวอร์ (Apache) เพื่อส่งต่อคำขอ WebSocket หรือคุณอาจกำหนดค่า Node.js เพื่อส่งต่อปริมาณข้อมูล HTTP วิจัยตัวเลือกที่มีอยู่และเลือกตัวเลือกที่ตรงกับความต้องการของคุณที่สุด


3

เช่นเดียวกับตัวเลือก reverse proxy อื่น ๆ ที่ได้กล่าวไปแล้วคุณสามารถกำหนดที่อยู่ IP ได้หลายเครื่อง สิ่งนี้อาจมีค่าใช้จ่ายสำหรับ IPv4 (หรืออาจไม่สามารถใช้ได้ทั้งนี้ขึ้นอยู่กับที่ที่เซิร์ฟเวอร์ของคุณโฮสต์) แต่ไม่ควรถ้าคุณอยู่ในตำแหน่งที่จะใช้ IPv6 (เช่นถ้าคนที่เชื่อมต่อกับหนึ่งหรือทั้งสองหรือบริการของคุณ . วิธีนี้ทั้งสองบริการสามารถฟังพอร์ต 80 ที่อยู่ต่างกัน

อย่างที่คุณพูดถึงพอร์ต 80 เท่านั้นฉันคิดว่าคุณไม่ได้ใช้ HTTPS หากคุณใช้ตัวเลือก reverse proxy คุณจำเป็นต้องมีใบรับรอง SSL หลายชื่อหรือกำหนดค่า SNI และใช้ชีวิตด้วยความจริงที่ว่าไคลเอนต์เก่า (IE บน XP, Android รุ่นเก่า) จะไม่สามารถ เชื่อมต่อโดยไม่มีข้อผิดพลาด ตัวเลือกที่อยู่หลายแห่งหลีกเลี่ยงปัญหานี้โดยต้องมีที่อยู่พิเศษที่ได้รับมอบหมาย


จุดเล็ก ๆ : ถ้าคุณใช้ NAT เพื่อแปล IP คุณสามารถทำการเปลี่ยนเส้นทางพอร์ตที่นั่นได้เช่นกัน เช่นหากคุณใช้เซิร์ฟเวอร์ Apache ที่สามารถเข้าถึงอินเทอร์เน็ตและต้องการใช้ XAMPP สำหรับการทดสอบให้รัน Apache บนพอร์ตที่ไม่ได้มาตรฐานและมีเราเตอร์ NAT ภายนอกพอร์ต 80 ร้องขอไปยังพอร์ตที่ไม่ได้มาตรฐานของ IP ภายใน สิ่งนี้จะอนุญาตให้เรียกใช้ XAMPP บนพอร์ต 80
Calrion
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.