mod proxy não está funcionando no apache

6

Estou tentando instalar o módulo Mod_Proxy do Apache no servidor Linux do CEM / CPanel. Aqui está a informação do sistema:

CentOS release 5.6 (Final)
Server version: Apache/2.2.21 (Unix)
Cpanel::Easy::Apache v3.7.2 rev9999

O propósito da minha instalação é para que, quando estiver no site abc.com, quando eu clicar em um link para o site auto.efg.com (vamos fingir que seu endereço IP é 192.168.0.101), o navegador irá carregar o aplicativo em auto .efg.com enquanto mainita abc.com na barra de endereços do navegador.

Então, segui este tutorial:

link

E quando terminei, consegui fazer isso:

root@ip-xxx-xxx-xxx [/tmp/httpd-2.2.21/modules/proxy]# ls -l           
/usr/local/apache/modules/mod_proxy*

-rwxr-xr-x 1 root root 88708 Jan  5 08:22 /usr/local/apache/modules/mod_proxy.so*
-rwxr-xr-x 1 root root 49654 Jan  5 08:23 /usr/local/apache/modules/mod_proxy_connect.so*
-rwxr-xr-x 1 root root 73196 Jan  5 08:23 /usr/local/apache/modules/mod_proxy_http.so*

Agora, depois que eu segui essas instruções e tentei reiniciar o servidor, recebi o seguinte erro:

/etc/init.d/httpd restart
httpd: Syntax error on line 35 of /usr/local/apache/conf/httpd.conf: module proxy_module is built-in and can't be loaded

Você vê, isso ocorreu porque eu carreguei o módulo para proxy_module. proxy_http_module em httpd.conf, então eu os comentei em /usr/local/apache/conf/httpd.conf:

# LoadModule proxy_module   modules/mod_proxy.so
# LoadModule proxy_http_module  modules/mod_proxy_http.so
# LoadModule proxy_connect_module modules/mod_proxy_connect.so

Agora esse erro foi embora.

E minha configuração de host virtual é assim:

<VirtualHost 50.63.53.79:80>
    ServerName abc.com
    ServerAlias www.abc.com
    DocumentRoot /home/eagl0028/public_html
    ServerAdmin [email protected]
    ## User eagl0028 # Needed for Cpanel::ApacheConf
    <IfModule mod_suphp.c>
      suPHP_UserGroup eagl0028 eagl0028
    </IfModule>
    <IfModule !mod_disable_suexec.c>
      SuexecUserGroup eagl0028 eagl0028
    </IfModule>
    ProxyRequests Off
    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>
    ProxyPreserveHost On
    ProxyPass / http://192.168.0.101/
    ProxyPassReverse / http://192.168.0.101/
    CustomLog /usr/local/apache/domlogs/abc.com-bytes_log "%{%s}t %I .\n%{%s}t %O ."
    CustomLog /usr/local/apache/domlogs/abc.com combined
    ScriptAlias /cgi-bin/ /home/eagl0028/public_html/cgi-bin/
</VirtualHost>

No entanto, quando eu corro:

 service httpd stop
 service httpd start

E depois publique em um URL relativo:

<form accept-charset="UTF-8" action="/users/sign_in" class="user_new" id="user_new" method="post">

Espero que ele seja lançado para 192.168.0.101, mas não. Eu verifico os logs do servidor 192.168.0.101 e não há sinal de uma requisição chegando. Tudo o que ocorre é um erro 404 não encontrado com a url no topo sendo abc.com/users/sign_in

    
por JohnMerlino 05.01.2012 / 20:26

2 respostas

1

Seu VirtualHost tem um endereço IP + par de portas de 50.63.53.79:80. Isso pode soar como um conselho óbvio, mas se o servidor tiver vários endereços IP ou portas em que está escutando, verifique se o navegador está, de fato, acessando o endereço IP e a porta. Se o POST estiver atingindo a porta 443 ou similar, este virtualhost não será aquele que será usado. Isso explicaria porque nada aparece no log. Verifique o log do servidor principal, para ver se o seu pedido foi para lá. Se você está executando seu teste a partir da rede local e está atingindo um endereço IP de rede local, isso definitivamente o faria.

Comportamento semelhante pode ser acionado se você tiver essa configuração em um arquivo de inclusão que não esteja sendo usado de fato.

Em ambos os casos, executar o binário httpd manualmente com o parâmetro -S (certifique-se de incluir todos os parâmetros necessários do processo apache atualmente em execução que você vê na tabela de processos) mostrará todos os hosts virtuais definidos e ajudam a identificar os que estão faltando ou outros pares address + port que possam estar capturando o tráfego.

Você pode configurar um virtualhost para ouvir todos os endereços IP usando um * em vez do endereço IP.

<VirtualHost *:80>

Você também pode configurar explicitamente vários endereços IP

<VirtualHost 50.63.53.79:80 192.168.0.101:80>
    
por 07.01.2013 / 00:54
0

O href de http://auto.efg.com/users/sign_in/ está enviando seu navegador para longe do proxy - não é tarefa do Apache garantir que todos os links da página mantenham o seu navegador conversando com o proxy. (Existem alguns módulos de terceiros que alteram os URLs na página em trânsito, mas não funcionam contra nada, exceto links em HTML simples)

Você pode alterar o link para deixar o esquema e o host intactos?

<a href="/users/sign_in/">clicky</a>
    
por 05.01.2012 / 20:30