reverse proxy no apache2 e no ubuntu

1

Então, criei um proxy reverso no servidor abc.com, onde xyz.com/users/sign_in fará proxy para "/ users / sign_in", de modo que, no url, ele mostre abc.com/users/sign_in. E isso funcionou bem no Ubuntu e no Apache2. Depois de ativar o proxy no Ubuntu, eu configurei meu host virtual assim:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName abc.com
        ServerAlias www.abc.com
        DocumentRoot /var/www/vhosts/abc.com/public_html
        <Directory /var/www/vhosts/abc.com/public_html/>
                Options FollowSymLinks MultiViews
                AllowOverride All
        </Directory>
        ProxyRequests Off
        <Proxy *>
          Order deny,allow
          Deny from all
          Allow from all
        </Proxy>
        ProxyPass /users/sign_in http://xyz.com/users/sign_in 
        ProxyPassReverse /users/sign_in http://xyz.com/users/sign_in
        ErrorLog /var/log/apache2/abc.com-error.log
        LogLevel warn
        CustomLog /var/log/apache2/abc.com-access.log combined
</VirtualHost>

Agora aqui está o problema. / users / sign_in faz uma solicitação de postagem no outro servidor (o servidor xyz), ou seja, é um formulário real que é enviado e o código no outro servidor redireciona o usuário para a raiz do site. Aqui está o log do outro servidor:

Started POST "/users/sign_in" for IPADDRESS at 2012-02-22 14:59:13 -0500
  Processing by Users::SessionsController#create as HTML
  Parameters: {"utf8"=>"✓", "remote"=>"true", "commit"=>"Login", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "subdomain"=>"", "remember_me"=>"0"}}
Redirected to http://abc.com/
Completed 302 Found in 110ms

Então, isso é realmente bom, parece na superfície. O outro servidor respondeu, assinou o usuário e redirecionou-o para o URL raiz. O problema é que eles não são redirecionados para a URL raiz: xyz.com (que contém o código do aplicativo que eu quero que eles vejam). Em vez disso, eles são redirecionados para o abc.com, que é o outro servidor.

Mas se eu adicionar um proxy para xyz.com além de xyz.com/users/sign_in no servidor abc.com, então terei um grande problema. Como o navegador saberá quando o usuário deseja ver abc.com (o conteúdo real do site) e xyz.com (o aplicativo que eu quero carregar depois que o / users / sign_in é invocado).

Estou completamente empenhado nisso e aberto a sugestões.

    
por JohnMerlino 23.02.2012 / 03:09

1 resposta

1

Hmm - implantação interessante dá uma chance. Isso fará proxy de todas as solicitações para o servidor xyz se o cliente enviar um cookie _session_id .

RewriteEngine On
RewriteCond %{HTTP_COOKIE} _session_id=.+ [NC]
RewriteRule ^/(.*)$ http://xyz.com/$1 [P,L]
ProxyPassReverse / http://xyz.com/

Coloque abaixo da configuração atual de ProxyPassReverse ; a ordem é significativa para as diretivas ProxyPass .

Isso parece muito frágil - tenho certeza de que você tem um motivo para fazer isso, mas não há outra maneira de separar as seções autenticadas e não autenticadas desse aplicativo?

Editar: para que o conteúdo xyz seja exibido a partir de /tracking :

ProxyPass /users/sign_in http://xyz.com/users/sign_in
ProxyPassReverse /users/sign_in http://xyz.com/users/sign_in
ProxyPass /tracking/ http://xyz.com/
ProxyPassReverse /tracking/ http://xyz.com/
    
por 23.02.2012 / 17:23