2012-04-26 15 views
9

Mam kilka webapps uruchomionych na mój serwer WWW:Jak ustawić lokalizację proxy dla wszystkich ścieżek oprócz niektórych z apache2?

  • repozytorium SVN Browser, dostępnej poprzez https://beta.mydomain.tld/svn/repos
  • przykład Trac, dostepne poprzez https://beta.mydomain.tld/trac
  • Mojej własnej aplikacji Java Web, dostępny za pośrednictwem http://beta.mydomain.tld/, stosując Proxy dla lokalnego serwera Tomcat na porcie 8080

Należy pamiętać, że pierwsze dwa są dostępne przez SSL, trzeci nie (jeszcze). Teraz muszę udostępnić moją aplikację internetową za pośrednictwem protokołu https, ale chcę, aby przeglądarki Trac i SVN nadal były dostępne w ich bieżącej lokalizacji.

tj. Próbuję skonfigurować serwer Apache2 do obsługi wszystkich żądań nie rozpoczynających się od svn lub trac dla Tomcat.

Dla istniejących aplikacji internetowych SSL, jest następująca konfiguracja

<Location /svn/repos> 
     DAV svn 
     SVNParentPath /home/myuser/svn 
     SVNListParentPath on 
     AuthType Basic 
     AuthName "Subversion repository" 
     AuthUserFile /home/myuser/.htpasswd 
     Require valid-user 
    </Location> 

    <Location /trac> 
     SetHandler mod_python 
     PythonHandler trac.web.modpython_frontend 
     PythonOption TracEnvParentDir /home/myuser/trac 
     PythonOption TracUriRoot /trac 
     AuthType Basic 
     AuthName "Trac" 
     AuthUserFile /home/myuser/.htpasswd 
     Require valid-user 
    </Location> 

Próbowałem dodać następującą lokalizację, ale to nic nie pomogło ...

<Location /> 
     ProxyPass   http://localhost:8080 
     ProxyPassReverse http://localhost:8080/ 
    </Location> 

W celu uzyskania dalszych informacji, tutaj jest kompletna konfiguracja apache2 w odniesieniu do części SSL (bez żadnego z moich nieudanych prób w niej - myślę, że jest to domyślna konfiguracja trac):

<VirtualHost *:443> 
    ServerAdmin [email protected] 
    ServerName beta.mydomain.tld:443 

    DocumentRoot /var/www/ 
    <Directory /var/www/> 
      Options Indexes FollowSymLinks MultiViews 
      AllowOverride None 
      Order allow,deny 
      allow from all 
    </Directory> 

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
    <Directory "/usr/lib/cgi-bin"> 
      AllowOverride None 
      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
      Order allow,deny 
      Allow from all 
    </Directory> 

    ErrorLog /var/log/apache2/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog /var/log/apache2/ssl_access.log combined 

    Alias /doc/ "/usr/share/doc/" 
    <Directory "/usr/share/doc/"> 
      Options Indexes MultiViews FollowSymLinks 
      AllowOverride None 
      Order deny,allow 
      Deny from all 
      Allow from 127.0.0.0/255.0.0.0 ::1/128 
    </Directory> 

    SSLEngine on 

    SSLCertificateFile /etc/ssl/certs/ssl.crt 
    SSLCertificateKeyFile /etc/ssl/private/ssl.key 

    BrowserMatch ".*MSIE.*" \ 
      nokeepalive ssl-unclean-shutdown \ 
      downgrade-1.0 force-response-1.0 

    <Location /svn/repos> 
     DAV svn 
     SVNParentPath /home/myuser/svn 
     SVNListParentPath on 
     AuthType Basic 
     AuthName "Subversion repository" 
     AuthUserFile /home/myuser/.htpasswd 
     Require valid-user 
    </Location> 

    <Location /trac> 
     SetHandler mod_python 
     PythonHandler trac.web.modpython_frontend 
     PythonOption TracEnvParentDir /home/myuser/trac 
     PythonOption TracUriRoot /trac 
     AuthType Basic 
     AuthName "Trac" 
     AuthUserFile /home/myuser/.htpasswd 
     Require valid-user 
    </Location> 

+0

Przepraszam, teraz, gdy to napisałem, zdałem sobie sprawę, że lepiej byłoby zlokalizować go przy awarii serwera. Byłoby wspaniale, gdyby ktoś mógł go tam przenieść ... Dzięki. – peterp

Odpowiedz

13

Wystarczy umieścić ProxyPass! do tych dwóch bloków lokalizacji. To przerywa proxy dla danych lokalizacji.

+0

dziękuję bardzo, nigdy bym się tego nie domyślił z dokumentów. – Zalumon

+0

Dziwne, zrobiłem. – EJP

+1

dobry dla ciebie ;-) – Zalumon

2

Mam taki sam scenariusz (w systemie Windows). Dla każdego, kto boryka się z tym problemem:

Zaczęło działać tylko dla mnie, gdy przeniosłem "lokalizację svn" część przed dyrektywami Proxy *.

<VirtualHost *:443> 
    ServerName www.domain.com 
    DocumentRoot "C:/Apache/domain" 
    ServerAdmin [email protected] 

    SSLEngine On 
    SSLCertificateFile "conf/ssl/domain.crt" 
    SSLCertificateKeyFile "conf/ssl/domain.key" 
    SSLCertificateChainFile "conf/ssl/domain.ca-bundle.crt" 

    <Location /svn> 
    DAV svn 
    SVNPath "C:/svnrepo" 
    SSLRequireSSL 
    AuthName "www.domain.com" 
    AuthType Basic 
    AuthUserFile "conf/svn/users" 
    AuthGroupFile "conf/svn/groups" 
    Require valid-user 

    # needs to come before the ProxyPass directives 
    ProxyPass ! 
    </Location> 

    ProxyRequests off 
    ProxyPreserveHost on 

    ProxyPass/ajp://127.0.0.1:8080/ 
    ProxyPassReverse/ajp://127.0.0.1:8080/  
</VirtualHost> 
Powiązane problemy