Tôi biết rằng câu trả lời của tôi là loại trùng lặp với một số câu trả lời khác, nhưng đây là một giải pháp hoàn chỉnh có một số lợi thế. Điều này hoạt động trên Tomcat 8:
- Ứng dụng chính được phục vụ từ thư mục gốc
- Việc triển khai các tệp tin chiến tranh thông qua giao diện web được duy trì.
- Ứng dụng chính sẽ chạy trên cổng 80 trong khi chỉ quản trị viên mới có quyền truy cập vào các thư mục quản lý (tôi nhận ra rằng các hệ thống * nix yêu cầu siêu người dùng để liên kết với 80, nhưng trên windows thì đây không phải là vấn đề).
Điều này có nghĩa là bạn chỉ phải khởi động lại tomcat một lần và sau khi các tệp chiến tranh được cập nhật có thể được triển khai mà không gặp sự cố.
Bước 1: Trong tệp server.xml, tìm mục kết nối và thay thế bằng:
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector
port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Bước 2: Xác định bối cảnh trong <Host ...>
thẻ:
<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>
Lưu ý rằng tôi đã giải quyết tất cả các ứng dụng trong thư mục webapp. Việc đầu tiên có hiệu quả chuyển đổi root và ứng dụng chính từ vị trí. ROOT hiện đã bật http://example.com/ROOT
và ứng dụng chính được bật http://example.com/
. Các ứng dụng web được bảo vệ bằng mật khẩu yêu cầu privileged="true"
thuộc tính.
Khi bạn triển khai tệp CAS.war khớp với thư mục gốc ( <Context path="/" docBase="CAS">
bạn phải tải lại tệp đó trong bảng quản trị vì nó không làm mới với việc triển khai.
Không bao gồm <Context path="/CAS" docBase="CAS">
trong bối cảnh của bạn vì nó vô hiệu hóa tùy chọn người quản lý để triển khai các tệp chiến tranh. Điều này có nghĩa là bạn có thể truy cập ứng dụng theo hai cách: http://example.com/
vàhttp://example.com/APP/
Bước 3: Để ngăn truy cập không mong muốn vào thư mục gốc và thư mục quản lý, hãy thêm một valve
vào các thẻ ngữ cảnh như thế này:
<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>
Điều này về cơ bản giới hạn quyền truy cập vào thư mục ứng dụng web quản trị đối với những người từ tên miền của tôi (địa chỉ IP giả) và localhost khi họ sử dụng cổng mặc định 8080 và duy trì khả năng triển khai động các tệp chiến tranh thông qua giao diện web.
Nếu bạn muốn sử dụng điều này cho nhiều ứng dụng đang sử dụng các địa chỉ IP khác nhau, bạn có thể thêm địa chỉ IP vào trình kết nối ( address="143.21.2.1"
).
Nếu bạn muốn chạy nhiều ứng dụng web từ thư mục gốc, bạn có thể sao chép thẻ Dịch vụ (sử dụng tên khác cho tên thứ hai) và thay đổi cơ sở tài liệu của <Context path="/" docBase="CAS">
ví dụ <Context path="/" docBase="ICR">
.