2016-06-28 36 views
12

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?

+0

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

+0

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

+0

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

Trả lời

0

Theo như tôi có thể biết (ví dụ: dựa trên this SOthis SFJetty Docs), không thể định cấu hình cho nội dung tĩnh, chỉ dành cho các ứng dụng web.

Những gì bạn có thể làm (đó không có nghĩa rằng bạn nên làm điều đó theo cách này) là bạn tạo ra một bộ lọc tùy chỉnh @PreMatching nếu bạn đang sử dụng JAX-RS hoặc tùy chỉnh MessageHandler nếu bạn đang sử dụng JAX- WS thực hiện chuyển hướng theo chương trình (ví dụ, thông qua trả về HTTP 301).

Các vấn đề liên quan