พอร์ตเปลี่ยนเส้นทางสำหรับใน Tomcat คืออะไร


13

มันยากที่จะเข้าใจเอกสารของ Tomcat และดูที่ server.xml คุณจะพบกับสลัดพอร์ตที่อาจจะเข้าใจยากเพราะมันไม่ได้อธิบายอย่างถูกต้องหรือครอบคลุมในเอกสาร

ตัวอย่างเช่นบรรทัดนี้ในไฟล์กำหนดค่า server.xml

<Connector port="8345" protocol="AJP/1.3" redirectPort="9875" />

และที่นี่คุณสามารถค้นหาพอร์ตการเปลี่ยนเส้นทางอื่น:

<Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" /> 

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

นี่คือคำอธิบายที่ได้รับจากเอกสารคู่มือ Tomcat สำหรับพอร์ต ajp:

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

ฉันมักจะเลือกพอร์ตการเปลี่ยนเส้นทางแบบสุ่มที่มากกว่า 1024 และใช้งานได้

แต่สิ่งนี้จะเข้าสู่การปฏิบัติเมื่อใด จะทราบได้อย่างไรว่าเมื่อใดที่คำขอนั้นต้องการการส่งผ่าน SSL

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

ในเซิร์ฟเวอร์หลัก https มีการบังคับใช้ใน apache หมายความว่าคำขอทั้งหมดถูกส่งไปยังเซิร์ฟเวอร์ดาวเทียมที่เข้ารหัสหรือเป็นข้อความธรรมดาหรือไม่? ฉันรู้ว่าถ้าฉันเข้าถึงเซิร์ฟเวอร์ดาวเทียมผ่านพอร์ต 8080 มันไม่ได้เข้ารหัส แต่ฉันสงสัยว่าสิ่งนี้ใช้กับการรับส่งข้อมูลที่ถูกเปลี่ยนเส้นทางไปยังเซิร์ฟเวอร์หลักเช่นกันและพอร์ตการเปลี่ยนเส้นทางนี้มีผลบังคับใช้ที่ใด

คำตอบ:


6

ตามที่กำหนดไว้ในเอกสารประกอบการเปลี่ยนเส้นทางพอร์ตจะเข้ามาในรูปภาพเมื่อคำขอ SSL จะเข้าสู่เซิร์ฟเวอร์และเนื่องจากพอร์ตตัวเชื่อมต่อ http ไม่สามารถจัดการคำขอ SSL ได้จึงจะเปลี่ยนเส้นทางไปยังพอร์ตที่กำหนดไว้ แต่จะต้องเป็นส่วนอื่นที่กำหนดไว้ในไฟล์ server.xml ซึ่งพอร์ตการเปลี่ยนเส้นทางที่กำหนดไว้จะทำหน้าที่เป็นพอร์ตตัวเชื่อมต่อเพื่อจัดการคำขอ SSL ตัวอย่างเช่นหากคุณต้องการให้คำขอ http ได้รับการจัดการโดยพอร์ต 80 และคำขอ https โดยพอร์ต 443 server.xml จะมีลักษณะดังนี้:

<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />

<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" scheme="https" secure="true" sslProtocol="TLS" keystoreFile="/path/to/kestorefile" keystorePass="my_keystore_password"/>

Keystorefile เป็นใบรับรอง SSL ของเว็บไซต์ของคุณ

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


ยุติธรรมพอสมควร สิ่งที่เกี่ยวกับการกำหนดค่าสำหรับ ajp เมื่อเทียบกับ http? นอกจากนี้ควรใช้พอร์ตที่ต่ำกว่า 1024 อย่างที่คุณพูดถึงหรือไม่ นั่นหมายความว่าการใช้ Tomcat ในฐานะรูทและไม่ดี
อูลูไค

1
ฉันไม่มีความคิดเกี่ยวกับ ajp มากนัก แต่การเปลี่ยนเส้นทางต้องทำงานเช่นเดียวกับ http เกี่ยวกับการใช้พอร์ตต่ำกว่า 1024 มันขึ้นอยู่กับคุณโดยสิ้นเชิง 80 และ 443 เป็นพอร์ตเริ่มต้นสำหรับโปรโตคอล https & https ไม่จำเป็นต้องพูดถึงมันอย่างชัดเจนใน url หากคุณต้องการใช้พอร์ตที่ไม่ได้มาตรฐานก็ขึ้นอยู่กับคุณ การรัน tomcat ด้วย root นั้นขึ้นอยู่กับแอพพลิเคชั่นที่ปรับใช้ หากคุณไม่เชื่อถือแอปพลิเคชันของคุณด้วยมุมมองด้านความปลอดภัยคุณจะต้องไม่เรียกใช้ Tomcat ด้วยรูท อีกวิธีคือคุณสามารถใช้ apache หรือ nginx เป็น proxy เพื่อรันบนพอร์ต 80 & 443 และเปลี่ยนเส้นทางคำขอของคุณไปยัง tomcat
Gaurav Pundir

ฉันจะทราบว่าiptablesยังทำงานได้เป็นอย่างดีสำหรับการเปลี่ยนเส้นทางการจราจรไปยังโพงหมู่วิธีการอื่น
SeldomNeedy

คำอธิบายนี้ไม่สมบูรณ์ หากคุณเปลี่ยนเส้นทางจากที่ไม่ใช่ SSL ไปยังพอร์ต SSL ไม่เพียงพอที่จะรวมตัวเชื่อมต่อเป้าหมายใน server.xml นอกจากนี้ยังจำเป็นต้องกำหนดค่าส่วน <security-constraint> ใน web.xml ดูstackoverflow.com/questions/9526425/…
luiscolorado
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.