2011-06-25 5 views
9

Używam odwrotnego proxy (Apache) przed Jetty 6. Użytkownicy łączą się z Apache z SSL, a Apache przekazuje niektóre żądania do Jetty przez zwykły HTTP. Chcę, aby Jetty używał bezpiecznych plików cookie sesji.Jetty bezpieczne pliki cookie sesji, gdy za odwrotnym proxy za pomocą HTTP

Można by pomyśleć, że to pierwsza rzecz, którą ktoś zrobi po zainstalowaniu Jetty - ale ciężko mi go uruchomić.

Ustawiłem Jetty, aby używać bezpiecznych plików cookie, jak opisano w another stackoverflow question. Jednak Jetty nie chce używać bezpiecznych plików cookie - zakładam, że dzieje się tak dlatego, że połączenie z odwrotnego proxy nie jest SSL.

Próbowałem przekonać Jetty, że działa na żądanie, które pojawiło się na SSL po opisie pod numerem sonatype.com. Oznacza to, że dodałem następujące Apache:

RequestHeader set X-Forwarded-Scheme "https" 

aw /etc/jetty/jetty.xml:

<Set name="handler"> 
    <New id="Handlers" class="org.mortbay.jetty.handler.rewrite.RewriteHandler"> 
    <Set name="rules"> 
     <Array type="org.mortbay.jetty.handler.rewrite.Rule"> 
     <Item> 
      <New id="forwardedHttps" 
       class="org.mortbay.jetty.handler.rewrite.ForwardedSchemeHeaderRule"> 
      <Set name="header">X-Forwarded-Scheme</Set> 
      <Set name="headerValue">https</Set> 
      <Set name="scheme">https</Set> 
      </New> 
     </Item> 
     </Array> 
    </Set> 

    <Set name="handler"> 
     <New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection"> 
     <Set name="handlers"> 
      <Array type="org.mortbay.jetty.Handler"> 
      <Item> 
       <New id="Contexts" class="org.mortbay.jetty.handler.ContextHandlerCollection"/> 
      </Item> 
      <Item> 
       <New id="DefaultHandler" class="org.mortbay.jetty.handler.DefaultHandler"/> 
      </Item> 
      <Item> 
       <New id="RequestLog" class="org.mortbay.jetty.handler.RequestLogHandler"/> 
      </Item> 
      </Array> 
     </Set> 
     </New> 
    </Set> 
    </New> 
</Set> 

nadal nie ma bezpiecznych plików cookie. Jakieś sugestie?

Odpowiedz

5

Nie mogłem uruchomić tego z Jetty 6. Po aktualizacji do Jetty 9 działało.

Zmieniłem to w /etc/jetty.xml. Został wykomentowane i Odkomentowano go:

<!-- Uncomment to enable handling of X-Forwarded- style headers --> 
<Call name="addCustomizer"> 
    <Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg> 
</Call> 

W odwrotnym proxy (obecnie nginx) proxy_set_header X-przekazane-Proto służy powiedzieć Jetty czy wniosek był http lub https:

location/{ 
    proxy_pass http://127.0.0.1:8080; 
    proxy_pass_header Server; 
    proxy_set_header Host $http_host; 
    proxy_set_header X-Forwarded-Proto $scheme; 
} 

Wreszcie w web.xml webappa włącza bezpieczne pliki cookie sesji i tylko http:

<?xml version="1.0" encoding="UTF-8"?> 

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
     version="3.0"> 

    <!-- filters and other stuff here --> 

    <session-config> 
    <session-timeout>120</session-timeout> 
    <cookie-config> 
     <http-only>true</http-only> 
     <secure>true</secure> 
    </cookie-config> 
    <tracking-mode>COOKIE</tracking-mode> 
    </session-config> 

</web-app>