2012-04-26 8 views
9

c'ho diverse webapps in esecuzione sul mio webserver:Come impostare una posizione proxy per tutti i percorsi tranne alcuni con apache2?

  • SVN Repository Browser, accessibile tramite https://beta.mydomain.tld/svn/repos
  • esempio Trac, accessibile tramite https://beta.mydomain.tld/trac
  • mia propria applicazione Java Web, accessibile tramite http://beta.mydomain.tld/, utilizzando un Proxy per il locale Apache Tomcat sulla porta 8080

Si prega di notare che i primi due sono disponibili via SSL, il terzo non è (ancora). Ora ho bisogno di rendere disponibile la mia app Web tramite https, ma voglio che Trac e SVN Browser siano ancora accessibili nella loro posizione corrente.

I.e. Sto cercando di configurare apache2 per il proxy di tutte le richieste che non iniziano con svn o trac in Tomcat.

Per le applicazioni SSL web esistenti, c'è la seguente configurazione

<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> 

ho provato ad aggiungere il seguente percorso, ma non ha aiutato nulla ...

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

Per ulteriori informazioni, ecco la configurazione completa di apache2 per quanto riguarda la parte SSL (senza nessuna delle mie prove fallite in esso - penso che sia la configurazione trac predefinita):

<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

Siamo spiacenti, ora che ho scritto questo, mi resi conto che sarebbe stato meglio situato a serverfault. Sarebbe bello se qualcuno potesse spostarlo lì ... Grazie. – peterp

risposta

13

Basta mettere ProxyPass! in quei due blocchi di posizione. Ciò interrompe il proxying per le posizioni interessate.

+0

grazie mille, non l'avrei mai capito dai documenti. – Zalumon

+0

Strano, l'ho fatto. – EJP

+1

buon per te ;-) – Zalumon

2

Ho lo stesso scenario (su Windows). Per chi ha problemi con questo:

Ha iniziato a funzionare solo per me quando ho spostato la parte "svn location" prima delle direttive 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>