Od kilku tygodni do zarządzania repozytoriami subversion używam całkiem sensownego narzędzia o nazwie SCM-Manager (i zgodnie z nazwą oprócz SVN wspiera też GITa i Mercuriala). Ponieważ cały ruch na zewnątrz chce mieć szyfrowany za SSL i ładne adresy odpowiada apache. Niestety pierwotna metoda podłączenia aplikacji odpalonej na jetty’m z apachem za pomocą mod_jk i AJP okazała się niestrawna dla SVNKita z którego korzysta SCM-Manager i kończyła się błędem 500 przy próbie checkoutu z repozytorium.
Rozwiązaniem lepszym, ba jak się okazuje polecanym w dokumentacji do serwera jetty jest wykorzystanie mod_proxy i HTTP zamiast AJP. Taka konfiguracja okazuje się stabilna, bezproblemowa i wymaga minimalny zmian w konfiguracji jetty i apache’a.
W pliku konfiguracyjnym jetty (przy instalacji z paczki .deb znajdziemy go w /opt/scm-manager/conf/server-config.xml) odkomentowujemy linijkę mówiącą o tym, że zapytania będą forwardowane przez proxy:
<Configure class="org.eclipse.jetty.server.Server">
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<Set name="host">
<SystemProperty name="jetty.host" />
</Set>
<Set name="Port">8090</Set>
<Set name="requestHeaderSize">16384</Set>
<!-- for mod_proxy -->
<Set name="forwarded">true</Set>
</New>
</Arg>
</Call>
A w samym apache’u uruchamiamy jeśli nie posiadaliśmy do tej pory moduł proxy (a2enmod proxy_http) a w konfiguracji VirtualHosta (w moim przypadku :443 z SSLem):
ProxyPass /scm http://localhost:8090/scm ProxyPassReverse /scm http://localhost:8090/scm <Location /scm> Require all granted RequestHeader set X-Forwarded-Proto "https" env=HTTPS </Location>
Oczywiście port 8090 można zastąpić dowolnym innym otwartym portem, a X-Forwarded-Proto dodajemy tylko w przypadku gdy ruch będzie szedł HTTPSem.