Ustawiłem Jetty 9.3 z dwiema konfiguracjami kontekstowymi XML. Jeden dla static content:Molo: Przekieruj HTTP do HTTPS dla zawartości statycznej
<?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>
i jeden dla aplikacji sieci web (plik 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>
I następnie wykorzystywane this answer skonfigurować Jetty do przekazania żądania HTTP na HTTPS. Dokładniej, dodałem następujące do 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>
i dodaje następujące do mojego HttpConfiguration
w jetty/etc/jetty.xml
:
<Call name="addCustomizer">
<Arg>
<New class="org.eclipse.jetty.server.SecureRequestCustomizer" />
</Arg>
</Call>
Działa to doskonale na mojej aplikacji sieci web (tj dostępu do serwera za pośrednictwem protokołu HTTP przy '/webapp 'przekieruje do HTTPS), ale nie wpływa na zawartość statyczną wyświetlaną w'/static '. Zakładam, że dzieje się tak dlatego, że ustawienie dodane do webdefault.xml
dotyczy tylko aplikacji internetowych, ponieważ mają one odpowiedni plik web.xml
.
Jak skonfigurować żądania HTTP przekierowania do HTTPS dla wszystkich stron obsługiwanych jako zawartość statyczna?
Co z 'RewriteHandler'? Może to pomoże ci rozwiązać twój problem. Po prostu wyświetlaj zawartość statyczną przez ten moduł obsługi. – Hrabosch
Możesz użyć 'nginx' do tego, wraz z przekierowaniem' http' do 'https' otrzymasz inne korzyści, takie jak pamięć podręczna strony statycznej. – Srinivasu
Czy próbowałeś użyć domyślnego serwletu + ServletContextHandler dla swojej statycznej zawartości zamiast ResourceHandler (która jest bardzo ograniczona)? Może to pomoże. @Srini W mojej skromnej opinii, używanie innego serwera HTTPD (Apache, Nginx, ...) tylko dla przekierowań jest trochę za dużo, szczególnie gdy twój serwer ma bardzo ograniczone zasoby. Używam małej płyty z tylko jednym GB pamięci RAM, nie podążałbym za twoją sugestią. – gouessej