2011-06-25 16 views
9

私はJetty 6の前でリバースプロキシ(Apache)を使用しています。ユーザーはSSLを使用してApacheに接続し、Apacheはリクエストの一部をプレーンHTTP経由でJettyに転送します。私はJettyに安全なセッションCookieを使用させたい。HTTPを使用するリバースプロキシの背後にあるJettyセキュアセッションクッキー

これは、誰もがJettyをインストールした後の最初のことだと思いますが、動作させるのは苦労しています。

another stackoverflow questionに記載されているように、安全なCookieを使用するようにJettyを設定しました。しかし、Jettyは安全なCookieの使用を拒否しています。リバースプロキシからの接続がSSLではないためです。

私はJettyを納得させようとしましたが、それはsonatype.comの説明に従ってSSL経由の要求に取り組んでいます。

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> 
それでも

無い安全なクッキーつまり、私は、Apacheに、次の追加しました。助言がありますか?

答えて

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> 
関連する問題