Jetty (6.1.24)를 사용하여 http에 대한 모든 요청을 https로 리디렉션하고 싶습니다. 어떤 이유로 (나의 무지) 이것이 나를 피하고 있습니다. 이것이 내가 가진 것입니다 :
<New id="redirect" class="org.mortbay.jetty.handler.rewrite.RedirectPatternRule">
<Set name="pattern">http://foobar.com/*</Set>
<Set name="location">https://foobar.com</Set>
</New>
응답으로 200을 얻습니다-본문은 http의 페이지입니다. 즉 리디렉션이 발생하지 않습니다.
답변
Jetty 9에 대해 말하기 … SSL 커넥터가 이미 작동하는 경우 다음과 같이 수행 할 수 있습니다.
1 단계 : web.xml에 추가하여 모든 것이 SSL을 통과하는지 확인하십시오. HTTP를 통해 리소스에 액세스하려고하면 403! SECURE 오류가 반환됩니다.
<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>
2 단계 : jetty.xml에 403! SECURE 오류를 추가하면 Jetty가 HTTPS로 리디렉션되도록합니다.
<New id="tlsHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Arg>
<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<!-- This says... Redirect to https://host:8443 if server returns "NOT SECURE" error -->
<Set name="secureScheme">https</Set>
<Set name="securePort">8443</Set>
</New>
</Arg>
<Call name="addCustomizer">
<Arg>
<New class="org.eclipse.jetty.server.SecureRequestCustomizer" />
</Arg>
</Call>
</New>
<!-- This is your HTTP connector, you should have another one for HTTPS -->
<New class="org.eclipse.jetty.server.ServerConnector">
<Arg name="server">
<Ref refid="MyServer" />
</Arg>
<Arg name="factories">
<Array type="org.eclipse.jetty.server.ConnectionFactory">
<Item>
<New class="org.eclipse.jetty.server.HttpConnectionFactory">
<Arg name="config">
<!-- defined above -->
<Ref refid="tlsHttpConfig" />
</Arg>
</New>
</Item>
</Array>
</Arg>
<Set name="host">localhost</Set>
<Set name="port">8080</Set>
</New>
답변
패턴이 URI 만 일치한다고 생각합니다. 다음과 같은 것을 사용해야합니다.
<New id="forwardedHttps" class="org.eclipse.jetty.rewrite.handler.ForwardedSchemeHeaderRule">
<Set name="header">X-Forwarded-Scheme</Set>
<Set name="headerValue">https</Set>
<Set name="scheme">https</Set>
</New>
답변
방금 문서를 추가했습니다 : http://wiki.eclipse.org/Jetty/Howto/Configure_SSL#Redirecting_http_requests_to_https
답변
내가 알 수있는 한, Jetty 6과 함께 제공되는 규칙 / 핸들러와는 쉽지 않습니다.
에 대한 RedirectPatternRule
일치 target
는 전체 URI가 아닌 Jetty 서버의 경로이므로 규칙이 일치하지 않습니다.
다음과 같이 변경할 수 있습니다.
<New id="redirect" class="org.mortbay.jetty.handler.rewrite.RedirectPatternRule">
<Set name="pattern">/*</Set>
<Set name="location">https://foobar.com</Set>
</New>
그러나 두 가지 문제가 있습니다.
- 모든 요청을 리디렉션합니다 (요청조차 포함
https
). - 요청 된 URL을 고려하지 않습니다 (
location
지정된대로 항상 리디렉션되고 와 일치하는 항목은 무시 함pattern
)
약간의 속임수로 첫 번째 문제를 극복 할 수 있습니다.
당신은 포장 할 수 RewriteHandler
A의 ContextHandler
및 문맥 처리기는 당신이 (에서 요청을 처리 할 커넥터를 지정할 수 있습니다 setConnectorNames
). 따라서 다시 작성하여 http 커넥터의 요청에만 적용 할 수 있습니다.
그래도 두 번째 문제를 극복하는 방법을 생각할 수 없습니다.
최선의 방법은 자신의 리디렉션 규칙을 작성하는 것입니다. 이를위한 개발 리소스가없는 경우 저에게 연락하십시오 (내 프로필에있는 내 블로그를 통해 내 전자 메일 주소를 찾을 수 있음). http를 https로 리디렉션하는 규칙을 작성하는 것은 매우 간단합니다.