Apache: redireciona a subpasta para outro IP na LAN

3

Eu tenho webserver1 atrás de um roteador atualmente atendendo todo o tráfego HTTP para mydomain.com. Acabei de adicionar o webserver2 e quero redirecionar o tráfego mydomain.com/server2 para essa caixa. Para o usuário, o redirecionamento deve passar despercebido (ou seja, o URL deve ser apenas mydomain.com/server2 e o redirecionamento acontece nos bastidores). Como configuro isso na configuração do apache do webserver1 (suponho que a configuração do webserver2 não precise fazer nada especial)?

Eu tentei o conselho fornecido aqui , usando mod_rewrite, mas não parece fazer o truque:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/server2/
RewriteRule ^/$ http://192.168.1.102/ [P,L]

Caso seja relevante, o webserver1 está hospedando um aplicativo django usando mod_wsgi, com alguns outros aplicativos que são redirecionados. Aqui está o virtualhost conf:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName  www.mydomain.com
    ServerAlias 127.0.0.1

    RewriteEngine on
        RewriteCond %{REQUEST_URI} ^/server2/
        RewriteRule ^/$ http://192.168.1.102 [P,L]

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <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/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>

    <Directory /var/www/mydomain>
    Order allow,deny
    Allow from all
    </Directory>

    ...

    WSGIDaemonProcess mydomain user=user group=user threads=25
    WSGIProcessGroup mydomain

    WSGIScriptAlias / /home/user/mydomain/apache/django.wsgi
    Alias /phpmyadmin /usr/share/phpmyadmin/

</VirtualHost>

Obrigado antecipadamente.

    
por NP01 05.09.2010 / 09:42

2 respostas

3

Mod_Rewrite é mais flexível que o mod_proxy. Descomente a linha de carga para isso.

Comparação simples aqui link

<VirtualHost *:80>

RewriteEngine on

# just in case (don't want to accidentally expose all the internal servers) !
ProxyRequests off

# define a log file
RewriteLog /var/log/apache/server2.rewrite.log
RewriteLogLevel 1

# add the tailing / if not there
RewriteRule     ^/server2$          http://www.mydomain.com/server2/  [R] [L]

# proxy the request to internal url
RewriteRule     ^/server2/(.*)      http://192.168.1.102/$1 [P]

Observe que este exemplo faz distinção entre maiúsculas e minúsculas.

    
por 05.09.2010 / 21:13
0

Uso:

ProxyPass /server2 http://192.168.1.102/server2

Você também pode precisar do ProxyPassReverse também. Veja a documentação do Apache:

link

Observe que o mod_wsgi de backend DEVE montar o aplicativo na mesma sub-URL que está aparecendo e sendo intermediado por proxy como no front-end.

Esteja ciente também de que pode ser necessário configurar no back-end para mexer em qual host / porta aparece o aplicativo de back-end em execução para que a reconstrução de URL no back-end funcione corretamente quando usada. Então, pesquisa que, se você achar que é um problema.

    
por 05.09.2010 / 12:07