Tôi đã thiết lập Cầu cảng 9.3 với hai cấu hình ngữ cảnh XML. Một cho static content:Cầu nối: Chuyển hướng HTTP sang HTTPS cho nội dung tĩnh
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure class="org.eclipse.jetty.server.handler.ContextHandler">
<Set name="contextPath">/static</Set>
<Set name="handler">
<New class="org.eclipse.jetty.server.handler.ResourceHandler">
<Set name="resourceBase">/home/user/static</Set>
<Set name="directoriesListed">true</Set>
</New>
</Set>
</Configure>
và một cho một ứng dụng web (file WAR):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/webapp</Set>
<Set name="war">/home/user/webapp.war</Set>
</Configure>
sau đó tôi sử dụng this answer thiết lập Jetty để chuyển tiếp các yêu cầu HTTP thành HTTPS. Cụ thể hơn, tôi đã thêm dòng sau vào jetty/etc/webdefault.xml
:
<security-constraint>
<web-resource-collection>
<web-resource-name>Everything</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
và bổ sung sau đây để tôi HttpConfiguration
trong jetty/etc/jetty.xml
:
<Call name="addCustomizer">
<Arg>
<New class="org.eclipse.jetty.server.SecureRequestCustomizer" />
</Arg>
</Call>
này hoạt động hoàn hảo cho các ứng dụng web của tôi (tức là truy cập vào máy chủ thông qua HTTP tại '/webapp 'sẽ chuyển hướng đến HTTPS), nhưng dường như không ảnh hưởng đến nội dung tĩnh được phân phối trong'/static '. Tôi cho rằng điều này là do cài đặt được thêm vào webdefault.xml
chỉ áp dụng cho các ứng dụng web vì chúng có tệp web.xml
áp dụng.
Làm cách nào để thiết lập yêu cầu HTTP chuyển hướng đến HTTPS cho tất cả các trang của tôi được phân phát dưới dạng nội dung tĩnh?
Còn về 'RewriteHandler' thì sao? Có lẽ nó sẽ giúp bạn giải quyết vấn đề của bạn. Chỉ cần phục vụ nội dung tĩnh bởi trình xử lý này. – Hrabosch
Bạn có thể sử dụng 'nginx' cho điều này, cùng với chuyển hướng' http' sang 'https', bạn sẽ nhận được các ưu điểm khác như bộ nhớ cache trang tĩnh. – Srinivasu
Bạn đã thử sử dụng servlet + ServletContextHandler mặc định cho nội dung tĩnh thay vì ResourceHandler (rất hạn chế)? Có lẽ nó sẽ giúp ích. @ srini Theo ý kiến khiêm tốn của tôi, sử dụng một máy chủ HTTPD khác (Apache, Nginx, ...) chỉ cho các chuyển hướng là một chút quá nhiều đặc biệt là khi máy chủ của bạn có tài nguyên rất hạn chế. Tôi sử dụng một bảng nhỏ chỉ với một GB RAM, tôi sẽ không làm theo đề nghị của bạn. – gouessej