- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Kann Jetty auch mit X-forwarded-scheme umgehen
Hallo zusammen,
Wir versuchen derzeit den internal Jetty des Redaktionsservers hinter einem Proxy zu betreiben. Der Proxy wird dabei per HTTPS angesprochen und die Kommunikation zum Jetty Server erfolgt รผber HTTP. In der fs-webapp.xml kann man den SelectChannelConnector konfigurieren, dass der Jetty den x-forwarded-host Header Variableninhalt fรผr Redirects verwendet in dem man den SelectChannelConnector auf forwarded=true setzt. Jetzt ist die Frage ob man auch konfigurieren kann, dass der Jetty auch den x-forwarded-scheme Header interpretieren kann?
In der Doku zum SelectChannelConnector konnte ich hier nichts finden http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/server/nio/SelectChannelConnect...
Im x-forwarded-scheme Header steht in unserem Fall drin, dass der Proxy รผber https angesprochen werden muss.
Es gibt auch noch andere Connectoren wie z.B. den ServerConnector. Dieser kann nach meiner Interpretation den Header interpretieren. Weiss jemand ob man diesen anstatt dem SelectChannelConnector verwenden kann?
Besten Dank!
- Labels:
-
Developers
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Herr Isenberg,
wir haben die Lรถsung fรผr das Problem gefunden.
Der in FirstSpirit integrierte Jetty bringt bereits eine ForwardedSchemeHeaderRule mit.
Um ihn zu aktivieren haben wir in fs-webapp.xml einen RewriteHandler integriert รผber:
<!-- Add new RewriteHandler for https --> | ||
<New id="RewriteHandler" class="org.eclipse.jetty.rewrite.handler.RewriteHandler"> | ||
<Set name="rules"> | ||
<Array type="org.eclipse.jetty.rewrite.handler.Rule"> | ||
<Item> | ||
<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> | ||
</Item> | ||
</Array> | ||
</Set> | ||
</New> |
Diesen Handler haben wir integriert in:
<!-- Set handler Collection Structure --> | |
<!-- ================================ --> | |
<Set name="handler"> | |
<New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"> | |
<Set name="handlers"> | |
<Array type="org.eclipse.jetty.server.Handler"> | |
<Item> | |
<Ref id="RewriteHandler"/> | |
</Item> | |
<Item> | |
<New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/> | |
</Item> | |
<Item> | |
<New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/> | |
</Item> | |
</Array> | |
</Set> | |
</New> | |
</Set> |
Damit leitet der Jetty Server die Anfragen immer dann auf https weiter wenn der x-forwarded-scheme Header gesetzt ist.
Beste Grรผsse
Andreas รsterle
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Herr รsterle,
Sie kรถnnen in fs-webapp.xml jeden beliebigen Connector aktivieren, der von den gewรผnschten Clients verwendet werden soll und kann. Der Support bezรผglich Jetty durch e-Spirit endet jedoch dort, wo die Datei an Stellen geรคndert wird, die nicht im FirstSpirit Adminhandbuch behandelt werden.
Zum ServerConnector: Meinen Sie den SPDYServerConnector? Der stellt einen Connector fรผr das SPDY-Protokoll bereit, nicht HTTP(S) in Version 1.0 oder 1.1.
Zum Betrieb des FirstSpirit-Servers mit Jetty hinter einem HTTPS-Reverse-Proxy siehe Kapitel 4.5.1 Apache HTTP-Server mit Servlet-Engine Jetty, speziell der letzte Abschnitt.
Ansonsten besteht die Mรถglichkeit einen AJP-Connector im Jetty zu aktivieren, dort besteht das Problem mit Host-Header und Schema hinter einem Reverse-Proxy nicht. Allerdings ist der Jetty-AJP-Connector nicht mit allen Proxies kompatibel, was man aber sofort beim ersten Test sehen kann, also ob es funktioniert oder nicht.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
In FirstSpirit 5.0R2 wird รผbrigens Jetty 8.1.3 verwendet.
Mรถglicherweise hilft folgende Diskussion zum Thema X-Forwared-Scheme weiter. Dort werden einige Lรถsungsmรถglichkeiten genannt: http://jira.codehaus.org/browse/JETTY-628
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Herr Isenberg!
Besten Dank fรผr die Links.
Soweit ich das verstanden habe muss man zusรคtzlich einen Filter auf dem internen Jetty installieren, welcher den 'request.scheme' Parameter setzt. Ein Filter kรถnnte der XForwardedFilter unter http://code.google.com/p/xebia-france/wiki/XForwardedFilter sein.
Ist es bei ihrer internen Jetty Installation fรผr einen Kunden รผberhaupt mรถglich die Jetty Libraries zu erweitern?
Wir hatten einmal versucht den Jetty um eine Lib zu erweitern und dann wurde jedes Mal das Jetty Verzeichnis durch die Inhalte der jetty.zip aus der fs-server.jar รผberschrieben. Als wir versucht haben die Lib in das zip der fs-server.jar zu erweitern, ist der Server nicht mehr gestartet.
Beste Grรผsse
Andreas รsterle
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Herr รsterle,
รผber den XForwardedFilter sollte es tatsรคchlich funktionieren. Aber Sie haben Recht, dass der Jetty innerhalb von FirstSpirit nicht beliebig erweitert werden kann, weil FirstSpirit einige Dateien verwaltet, also direkt beim Start รผberschreibt. Fรผr Libraries gilt das aber nicht, die kรถnnen Sie als JAR-Datei ohne auszupacken unter firstspirit5/shared/lib ablegen, wo sie beim Neustart des Java-Prozesses geladen werden. Optional kรถnnen solche JARs auch als FirstSpirit-Modul (FSM-Datei) verpackt werden und รผber den FirstSpirit-Adminclient hochgeladen werden. Nur fรผr die Konfiguration kann das FirstSpirit-Modul hier nicht verwendet werden, weil das nur fรผr die WebApps fs5preview, fs5webedit und fs5staging vorgesehen ist, nicht fรผr fs5root und fs5webmon. Die Datei fs-server.jar oder allgemein von e-Spirit ausgelieferte JARs kรถnnen nicht geรคndert werden, weil dann die digitale Kryptosignatur ungรผltig wird und FirstSpirit nicht mehr startet bis die Datei durchs Original ersetzt wurde.
Die Konfiguration des XForwardedFilter mรผsste dann in der Datei webdefault.xml erfolgen, soweit ich das richtig lese. Die firstspirit50/server/jetty/webdefault.xml kann dazu aber nicht verwendet werden, weil sie von FirstSpirit รผberschrieben wird, stattdessen eine webdefault.xml in jedes WEB-INF/ unterhalb von firstspirit5/web/fs5* kopieren, nach jeder Aktualisierung des FirstSpirit-Servers.
Siehe zu webdefault.xml und Konfiguration des Jetty auch https://community.e-spirit.com/thread/2296 .
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Herr Isenberg,
wir haben die Lรถsung fรผr das Problem gefunden.
Der in FirstSpirit integrierte Jetty bringt bereits eine ForwardedSchemeHeaderRule mit.
Um ihn zu aktivieren haben wir in fs-webapp.xml einen RewriteHandler integriert รผber:
<!-- Add new RewriteHandler for https --> | ||
<New id="RewriteHandler" class="org.eclipse.jetty.rewrite.handler.RewriteHandler"> | ||
<Set name="rules"> | ||
<Array type="org.eclipse.jetty.rewrite.handler.Rule"> | ||
<Item> | ||
<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> | ||
</Item> | ||
</Array> | ||
</Set> | ||
</New> |
Diesen Handler haben wir integriert in:
<!-- Set handler Collection Structure --> | |
<!-- ================================ --> | |
<Set name="handler"> | |
<New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"> | |
<Set name="handlers"> | |
<Array type="org.eclipse.jetty.server.Handler"> | |
<Item> | |
<Ref id="RewriteHandler"/> | |
</Item> | |
<Item> | |
<New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/> | |
</Item> | |
<Item> | |
<New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/> | |
</Item> | |
</Array> | |
</Set> | |
</New> | |
</Set> |
Damit leitet der Jetty Server die Anfragen immer dann auf https weiter wenn der x-forwarded-scheme Header gesetzt ist.
Beste Grรผsse
Andreas รsterle
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Weil der Parameter forwarded=true nur im Text genannt ist, hier noch einmal der Hinweise darauf, dass dieser Parameter wichtig ist. Er muss in firstspirit5/conf/fs-webapp.xml im Abschnitt org.eclipse.jetty.server.nio.SelectChannelConnector
eingetragen werden:
<Set name="forwarded">true</Set>
Die von Herrn รsterle hier gezeigte Konfiguration ist in die allgemeine Anleitung zum Betrieb von FirstSpirit als Backend hinter Frontend Webservern und Reverse Proxies รผbernommen und kann mit mit FirstSpirit in Version 5.0 und 5.1 verwendet werden: https://community.e-spirit.com/docs/DOC-1827
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ich habe diesen Thread leider erst zu spรคt, dafรผr aber eine andere Lรถsungsmรถglichkeit gefunden: In der "httpConfig"-Sektion haben wir den "ForwardedRequestCustomizer" (siehe Doku) hinzugefรผgt:
<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<!-- [sonstige Optionen ...] -->
<Call name="addCustomizer">
<Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg>
</Call>
</New>
Zusammen mit dem manuell in der Apache-Conf gesetzten Request-Header:
RequestHeader set X-Forwarded-Proto "https" env=HTTPS
werden alle Link-Schemata sauber auf https umgesetzt.
Viele Grรผรe,
Martin Kresse

