SCM-Manager + apache z mod_jk = problem


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.


Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *