2011-06-25 21 views
9

我在Jetty 6的前面使用反向代理(Apache)。用户使用SSL连接到Apache,并且Apache通过普通的HTTP将一些请求转发到Jetty。我希望Jetty使用安全会话cookie。Jetty安全会话cookie在使用HTTP的反向代理的背后

有人会认为这将是任何人在安装Jetty后第一件事 - 但我很难让它工作。

我设置了Jetty以使用安全Cookie,如another stackoverflow question中所述。但是,Jetty拒绝使用安全Cookie - 我认为这是因为来自反向代理的连接不是SSL。

我试图说服Jetty,它正在处理通过SSL发出的请求,并在sonatype.com处进行了说明。也就是说,我加入Apache的以下内容:

RequestHeader set X-Forwarded-Scheme "https" 

和/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> 

仍然没有安全cookie。有什么建议么?

回答

5

我不能得到这个与Jetty 6工作。升级到Jetty 9后,我得到了它的工作。

我在/etc/jetty.xml中对此进行了更改。有人评论了,我注释掉它:

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

在反向代理(现在nginx的)proxy_set_header X转发 - 协议是用来告诉码头请求是HTTP或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; 
} 

最后,在webapp的web.xml中,这将启用安全和http专用会话cookie:

<?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>