ฉันรู้ว่าคำตอบของฉันซ้อนทับกับคำตอบอื่น ๆ แต่นี่เป็นคำตอบที่สมบูรณ์ซึ่งมีข้อดีอยู่บ้าง สิ่งนี้ใช้ได้กับ Tomcat 8:
- แอปพลิเคชันหลักให้บริการจากราก
- การปรับใช้ไฟล์สงครามผ่านเว็บอินเตอร์เฟสจะได้รับการบำรุงรักษา
- แอปพลิเคชันหลักจะทำงานบนพอร์ต 80 ในขณะที่มีเพียงผู้ดูแลระบบเท่านั้นที่สามารถเข้าถึงโฟลเดอร์การจัดการได้ (ฉันตระหนักดีว่าระบบ * nix ต้องการ superuser สำหรับการผูกกับ 80 แต่บน windows นี่ไม่ใช่ปัญหา)
ซึ่งหมายความว่าคุณต้องรีสตาร์ทเครื่อง tomcat เพียงครั้งเดียวและหลังจากอัปเดตไฟล์ war แล้วจะสามารถใช้งานได้โดยไม่มีปัญหา
ขั้นตอนที่ 1: ในไฟล์ server.xml ค้นหารายการตัวเชื่อมต่อและแทนที่ด้วย:
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector
port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
ขั้นตอนที่ 2: กำหนดบริบทภายใน<Host ...>
แท็ก:
<Context path="/" docBase="CAS">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/ROOT" docBase="ROOT">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/manager" docBase="manager" privileged="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/host-manager" docBase="host-manager" privileged="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
โปรดทราบว่าฉันระบุแอปทั้งหมดในโฟลเดอร์ webapp ขั้นแรกสลับรูทและแอพหลักจากตำแหน่งได้อย่างมีประสิทธิภาพ รากอยู่ในขณะนี้และการประยุกต์ใช้หลักอยู่ที่http://example.com/ROOT
http://example.com/
เว็บแอพที่ได้รับการป้องกันด้วยรหัสผ่านต้องการprivileged="true"
แอตทริบิวต์
เมื่อคุณปรับใช้ไฟล์ CAS.war ที่ตรงกับรูท ( <Context path="/" docBase="CAS">
คุณต้องโหลดไฟล์นั้นใหม่ในแผงผู้ดูแลระบบเนื่องจากไม่รีเฟรชด้วยการปรับใช้
อย่ารวมไว้<Context path="/CAS" docBase="CAS">
ในบริบทของคุณเนื่องจากปิดใช้งานตัวเลือกผู้จัดการเพื่อปรับใช้ไฟล์สงคราม ซึ่งหมายความว่าคุณสามารถเข้าถึงแอปได้สองวิธี: http://example.com/
และhttp://example.com/APP/
ขั้นตอนที่ 3: เพื่อป้องกันการเข้าถึงรูทและโฟลเดอร์ผู้จัดการโดยไม่ต้องการให้เพิ่มvalve
แท็กบริบทเหล่านี้:
<Context path="/manager" docBase="manager" privileged="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
addConnectorPort="true"
allow="143\.21\.2\.\d+;8080|127\.0\.0\.1;8080|::1;8080|0:0:0:0:0:0:0:1;8080"/>
</Context>
โดยพื้นฐานแล้วสิ่งนี้จะ จำกัด การเข้าถึงโฟลเดอร์ admin ของเว็บแอปให้กับบุคคลจากโดเมนของฉันเอง (ที่อยู่ IP ปลอม) และ localhost เมื่อพวกเขาใช้พอร์ตเริ่มต้น 8080 และรักษาความสามารถในการปรับใช้ไฟล์สงครามแบบไดนามิกผ่านเว็บอินเตอร์เฟส
หากคุณต้องการใช้สิ่งนี้กับแอพหลายตัวที่ใช้ที่อยู่ IP ต่างกันคุณสามารถเพิ่มที่อยู่ IP ลงในตัวเชื่อมต่อ ( address="143.21.2.1"
)
หากคุณต้องการเรียกใช้เว็บแอปหลายรายการจากรากที่คุณสามารถทำซ้ำแท็กบริการ (ใช้ชื่อที่แตกต่างกันสำหรับสอง) และเปลี่ยน docbase ของการยกตัวอย่างเช่น<Context path="/" docBase="CAS">
<Context path="/" docBase="ICR">