Я установил Jetty 9.3 с двумя конфигурациями контекста XML. Один для статический контент:
<?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>
и один для веб-приложения (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>
Затем я использовал этот ответ, чтобы настроить Jetty для пересылки HTTP-запросов на HTTPS. В частности, я добавил следующее в 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>
и добавил к моему HttpConfiguration
в jetty/etc/jetty.xml
следующее:
<Call name="addCustomizer">
<Arg>
<New class="org.eclipse.jetty.server.SecureRequestCustomizer" />
</Arg>
</Call>
Это отлично работает для моего веб-приложения (т.е. доступ к серверу через HTTP в '/webapp' будет перенаправлен на HTTPS), но, похоже, не влияет на статический контент, обслуживаемый под "/static". Я предполагаю, что это связано с тем, что параметр, добавленный в webdefault.xml
, применяется только к веб-приложениям, так как они имеют применимый файл web.xml
.
Как настроить HTTP-запросы для перенаправления на HTTPS, чтобы все мои страницы служили статическим контентом?