Configuração do proxy reverso do Apache para vários domínios

2

Eu sou novato. Eu tenho 1 servidor LAMP CentOS, que hospeda 3 sites com a seguinte configuração Apache httpd.conf :

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /home/www/html/domaina.com
    ServerName www.domaina.com
    ServerAlias *.domaina.com
    ScriptAlias /cgi-bin/ "/home/www/html/domaina.com/cgi-bin/"
    RewriteEngine On
    RewriteOptions Inherit
    ErrorLog /home/log/domaina.com-error_log
    CustomLog /home/log/domaina.com-access_log common
</VirtualHost>
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/ca.crt
    SSLCertificateKeyFile /etc/pki/tls/private/ca.key   
    ServerAdmin [email protected]
    DocumentRoot /home/www/html/domaina.com
    ServerName www.domaina.com
    ServerAlias *.domaina.com 
    ScriptAlias /cgi-bin/ "/home/www/html/domaina.com/cgi-bin/"
    RewriteEngine On
    RewriteOptions Inherit 
    ErrorLog /home/log/domaina.com-error_log
    CustomLog /home/log/domaina.com-access_log common
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /home/www/html/domainb.com
    ServerName www.domainb.com
    ServerAlias *.domainb.com
    ScriptAlias /cgi-bin/ "/home/www/html/domainb.com/cgi-bin/"
    RewriteEngine On
    RewriteOptions Inherit
    ErrorLog /home/log/domainb.com-error_log
    CustomLog /home/log/domainb.com-access_log common
</VirtualHost>
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/ca.crt
    SSLCertificateKeyFile /etc/pki/tls/private/ca.key   
    ServerAdmin [email protected]
    DocumentRoot /home/www/html/domainb.com
    ServerName www.domainb.com
    ServerAlias *.domainb.com 
    ScriptAlias /cgi-bin/ "/home/www/html/domainb.com/cgi-bin/"
    RewriteEngine On
    RewriteOptions Inherit 
    ErrorLog /home/log/domainb.com-error_log
    CustomLog /home/log/domainb.com-access_log common
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /home/www/html/domainc.com
    ServerName www.domainc.com
    ServerAlias *.domainc.com
    ScriptAlias /cgi-bin/ "/home/www/html/domainc.com/cgi-bin/"
    RewriteEngine On
    RewriteOptions Inherit
    ErrorLog /home/log/domainc.com-error_log
    CustomLog /home/log/domainc.com-access_log common
</VirtualHost>
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/ca.crt
    SSLCertificateKeyFile /etc/pki/tls/private/ca.key   
    ServerAdmin [email protected]
    DocumentRoot /home/www/html/domainc.com
    ServerName www.domainc.com
    ServerAlias *.domainc.com 
    ScriptAlias /cgi-bin/ "/home/www/html/domainc.com/cgi-bin/"
    RewriteEngine On
    RewriteOptions Inherit 
    ErrorLog /home/log/domainc.com-error_log
    CustomLog /home/log/domainc.com-access_log common
</VirtualHost>

Tudo funciona neste servidor quando os domínios são apontados diretamente para ele. Mas eu gostaria de usar outro servidor como proxy reverso para domainc.com. Então eu instalei o apache em outro servidor do CentOS e aponte o domainc.com para ele. Eu coloquei a seguinte configuração para /etc/httpd/conf.d/proxy.conf :

<IfModule mod_proxy.c>
        #turning ProxyRequests on and allowing proxying from all may allow
        #spammers to use your proxy to send email.

        ProxyRequests Off

        <Proxy *>
                AddDefaultCharset off
                Order deny,allow
                Allow from all
        </Proxy>

        # Enable/disable the handling of HTTP/1.1 "Via:" headers.
        # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
        # Set to one of: Off | On | Full | Block

        ProxyVia On
</IfModule>

E esta configuração para httpd.conf:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName www.domainc.com
    ErrorLog logs/domainc.com-error_log
    CustomLog logs/domainc.com-access_log common

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / http://[IP of server 1]:80/
    ProxyPassReverse / http://[IP of server 1]:80/
</VirtualHost>

Mas agora, quando tento navegar no domainc.com, recebo conteúdo do domaina.com. Eu tenho tentado descobrir isso por várias horas agora, tentando diferentes configurações que encontrei online, mas ainda estou obtendo os mesmos resultados. Alguém pode ajudar por favor? É possível fazer isso?

    
por Josef 05.05.2015 / 00:34

2 respostas

1

Quando você estiver usando o mod_proxy com essa configuração, o Host: -header original será substituído pelo que você escreveu em ProxyPass . Portanto, quando um cliente se conecta ao seu servidor domainc , o cliente enviará o cabeçalho Host: www.domainc.com . Seu proxy reverso removerá esse cabeçalho e, em vez disso, enviará Host: [IP of server] . E como você não tem o IP listado em nenhum VirtualHost, o apache simplesmente escolherá o primeiro na lista de virtualhost, ou seja, domaina.com .

A melhor maneira de corrigir isso é alterar a configuração do proxy, adicionando a linha

ProxyPreserveHost On

Isso fará com que o apache reutilize o host original: -header ao se conectar ao servidor de back-end.

(Você também pode adicionar o endereço IP à configuração do virtualhost do domainc.com, mas você terá exatamente o mesmo problema se quiser fazer proxy em qualquer outro domínio no servidor, portanto não é o que eu recomendaria. )

    
por 16.09.2015 / 11:07
-2
ssh host2 sed -i~ '
  /Proxy/s/[IP of server 1]/[hostname of server 1]/
' /etc/httpd/conf/httpd.conf

Por favor, leia sobre o mecanismo e especialmente as razões pelas quais as mudanças nos arquivos marcados como Config em RPMs não receberão nenhuma atualização de [segurança] se elas foram modificadas. Isso foi recentemente (-ish) um problema com uma atualização de segurança ostensivamente entregue a / etc / sudoers, mas sempre foi algo que os novatos em sistemas baseados em RPM não sabem observar. No seu caso, acostume-se com /etc/httpd/conf.s/v-057-virtual-serverc.conf e arquivos de nome similar. (Ou não, por enquanto; sua escolha)

    
por 19.08.2015 / 14:30