Como eu posso proteger um webapp do Tomcat que tenha proxy reverso em um host virtual Apache2 usando autenticação básica?

5

Estou tendo problemas para descobrir como adicionar a autenticação HTTP básica para proteger com senha um ambiente de teste de desenvolvimento em execução em um servidor Web de produção. Tanto o site principal quanto o ambiente de teste são hosts virtuais que usam o proxy AJP para atender a instâncias separadas de aplicativos web do Tomcat. Precisamos impedir que o público acesse o ambiente de teste sem fazer alterações no web.xml no ambiente do Tomcat, a proteção deve ser obtida com o Apache e não com o Tomcat. No entanto, as diretivas ProxyPass e ProxyPassReverse no host virtual parecem substituir o uso de .htaccess ou qualquer coisa que eu coloque em um < Directory > bloco de controle, embora pareça que não posso usar diretivas como AuthType no corpo principal do < VirtualHost > bloco de controle ao lado. Eu não tenho muita experiência com o Apache (ou Tomcat) e não tenho certeza sobre quais diretivas podem aplicar onde e quais podem substituir outras. Como as alterações precisam ser feitas em um servidor de produção, não posso experimentar facilmente por medo de causar qualquer tempo de inatividade.

O httpd.conf em si é muito simples:

LoadModule  proxy_http_module   /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule  headers_module      /usr/lib/apache2/modules/mod_headers.so

LoadFile    /usr/lib/libxml2.so

O arquivo host virtual relevante, / etc / apache2 / sites-available / dev443, é o seguinte:

<IfModule mod_ssl.c>
<VirtualHost dev.mydomain.com:80443>
    ServerName  dev.mydomain.com:80443
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/dev

    ProxyPass / ajp://127.0.0.1:8010/
    ProxyPassReverse / ajp://127.0.0.1:8010/

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/dev/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All 
        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

    LogLevel info

    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/server.crt
    SSLCertificateKeyFile /etc/ssl/private/server.key
    SSLCACertificateFile  /etc/ssl/certs/intermediate.crt

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
        SSLOptions +StdEnvVars
    </Directory>

    BrowserMatch "MSIE [2-6]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0
    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

</VirtualHost>
</IfModule>

Para o registro, as seguintes versões estão envolvidas: Apache: 2.2.14 / Tomcat: 7.0.23 / Java: SE 1.6.0_26-b03 / OS: Ubuntu 10.04 LTS

    
por Joe Carroll 23.01.2012 / 10:03

1 resposta

3

Como você descobriu, os blocos <Directory> não se aplicam porque você está veiculando conteúdo de um servidor proxy, não de um diretório local.

Experimente <Location> .

<Location />
    ProxyPass ajp://127.0.0.1:8010/
    ProxyPassReverse ajp://127.0.0.1:8010/
    AuthType Basic
    AuthName "something"
    AuthUserFile /path/to/htpasswd
    Require valid-user
</Location>
    
por 23.01.2012 / 19:21