2012-04-26 20 views
9

Tengo varias aplicaciones web que se ejecutan en mi servidor web:¿Cómo configurar una ubicación proxy para todas las rutas excepto algunas con apache2?

  • repositorio SVN navegador, accesible a través de https://beta.mydomain.tld/svn/repos
  • instancia Trac, accesible a través de https://beta.mydomain.tld/trac
  • Mi propia aplicación Java Web, accesible a través de http://beta.mydomain.tld/, utilizando una Proxy para Apache Tomcat local en el puerto 8080

Tenga en cuenta que los dos primeros están disponibles a través de SSL, el tercero no es (todavía). Ahora tengo que hacer que mi aplicación web esté disponible a través de https, pero quiero que Trac y SVN Browser aún estén accesibles en su ubicación actual.

I.e. Estoy intentando configurar apache2 para proxy todas las solicitudes que no comienzan con svn o trac a Tomcat.

Para las aplicaciones web SSL existentes, hay la siguiente configuración

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

He intentado añadir la siguiente ubicación, pero no sirvió de nada nada ...

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

Para más información, aquí está la configuración completa de apache2 con respecto a la parte SSL (sin ninguna de mis pruebas fallidas en ella, creo que es la configuración de trac predeterminada):

<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

Lo siento, ahora que he escrito esto, me di cuenta de que habría sido mejor ubicado en serverfault. Sería genial si alguien pudiera moverlo allí ... Gracias. – peterp

Respuesta

13

sólo hay que poner ProxyPass! en esos dos bloques de Ubicación. Eso detiene el proxy para las ubicaciones involucradas.

+0

muchas gracias, nunca hubiera averiguado esto en los documentos. – Zalumon

+0

Extraño, lo hice. – EJP

+1

bueno para ti ;-) – Zalumon

2

Tengo el mismo escenario (en Windows). Para cualquiera que tenga problemas con esto:

Solo comencé a funcionar para mí cuando moví la parte "svn location" antes de las directivas 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> 
Cuestiones relacionadas