Usando Mod_rewrite e Autenticação em TODOS os URLs de entrada

7

Eu preciso ter certeza de que meu URL, chame-o de que www.domain.com está sempre protegido pelo menos via autenticação básica HTTP. Além disso, quero usar mod_rewrite para enviar meus usuários para uma das duas instâncias OC4j em execução no meu servidor. Eu também quero proteger o painel de administração do OC4j (e outras funções do tipo de administrador) com essa mesma autenticação. Eu terei 2 usuários, chame-os de admin (o administrador terá acesso às instâncias do OC4j e ao painel de administração do OC4j) e convidado (o convidado só poderá acessar as instâncias do OC4j).

Então, digamos que eu tenha duas instâncias OC4j - instance_a e instance_b. instance_a será executado na porta 8888 e instance_b será executado na porta 8889. Quando um usuário digita www.domain.com/instance_a, quero primeiro ter certeza de que eles estão autenticados no servidor, então eu quero usar mod_rewrite para fazer proxy da solicitação para www .domain.com: 8888 / instance_a. Isso seguirá o exemplo para instance_b. Novamente, qualquer usuário, administrador ou convidado pode acessar essas instâncias. Se o usuário tentar acessar o painel de administração do OC4j diretamente para qualquer instância, eu quero expulsá-lo se ele não for um usuário administrador.

Eu tenho uma entrada do VirtualHost que se parece com isso:

<VirtualHost *:80>
        ServerName www.domain.com
        CustomLog "/var/log/httpd/ic/access_log" "combined"
        ErrorLog "/var/log/httpd/ic/error_log"
        RewriteEngine on
        RewriteLogLevel 9
        RewriteLog "/var/log/httpd/rewrite_log"
        RewriteCond %{REMOTE_USER} !^guest$ [OR]
        RewriteCond %{REMOTE_USER} !^admin$
        RewriteCond %{REQUEST_URI} ^/instance_a.*$
        RewriteRule ^.*$ - [F,L]
        <LocationMatch "^/.*$">
                AuthType Basic
                AuthName "Please Login"
                AuthBasicProvider file
                AuthUserFile /usr/local/apache/passwd/passwords
                Require valid-user
        </LocationMatch>
</VirtualHost>

Por alguma razão, isso não está funcionando (não que eu esteja surpreso). Parece que quando eu uso as coisas Authentication e mod_rewrite, elas não funcionam juntas.

Obrigado antecipadamente.

    
por El Guapo 30.04.2009 / 04:35

3 respostas

2

Eu acredito que o problema com a configuração postada são as duas primeiras linhas RewriteCond:

    RewriteCond %{REMOTE_USER} !^guest$ [OR]
    RewriteCond %{REMOTE_USER} !^admin$

Se REMOTE_USER for 'admin', o primeiro teste será bem-sucedido, causando uma resposta Proibida. O caso de 'convidado' é semelhante. Você poderia tentar combinar os dois testes:

    RewriteCond %{REMOTE_USER} !^(guest|admin)$

Se REMOTE_USER for guest ou admin, ^(guest|admin)$ será igual, fazendo com que todo o RewriteCond falhe.

    
por 16.08.2009 / 02:12
0

Não tenho certeza se isso ajudará ou não, mas você pode querer retirar suas regras / condições de reescrita do LocationMatch e colocá-las antes / depois do LocationMatch.

    
por 30.04.2009 / 05:35
0

Blimey.

Isso não foi testado, mas talvez algo como:

<VirtualHost *:80>
        ServerName www.domain.com
        CustomLog "/var/log/httpd/ic/access_log" "combined"
        ErrorLog "/var/log/httpd/ic/error_log"
        RewriteEngine on
        RewriteRule ^(/instance_a/.*) http://localhost:8888/$1 [P]
        RewriteRule ^(/instance_b/.*) http://localhost:8889/$1 [P]
        <Proxy "http://localhost:888?/">
                AuthType Basic
                AuthName "Please Login"
                AuthBasicProvider file
                AuthUserFile /usr/local/apache/passwd/passwords
                Require valid-user
        </Proxy>
        <Proxy "http://localhost:888?/instance_?/admin">
                Require group admin
        </Proxy>
</VirtualHost>

Não sei se você precisa duplicar as diretivas de autenticação em cada bloco Proxy - você terá que experimentar.

    
por 02.08.2009 / 00:13