Depois de implantar no Prod Server

Depois de implantar no Prod Server

Eu estava planejando implantar o proxy reverso usando Apache, mas antes de fazer isso no ambiente Prod, tentei implementar em meu laboratório doméstico. Tenho dois vms em execução no Redhat.

192.168.56.70 mainsite.example.com  mainsite
#192.168.56.70  mainsite2.example.com mainsite2
192.168.56.71 areverseproxy.example.com areverseproxy

no servidor Backend Apache eu fiz um host virtual, conteúdo desse VHost

<VirtualHost *:80>                                                      
  #  DocumentRoot "/var/www/html/"                                      
  # <Directory "/var/www/html/mainsite">                                
  #  AllowOverride None                                                 
  #  # Allow open access:                                               
  #  Require all granted                                                
  # </Directory>                                                        
                                                                        
    #DirectoryIndex "/var/www/html/mainsite/index.html"                 
    ServerName mainsite.example.com                                     
    ServerAlias mainsite                                                
    Redirect permanent / https://192.168.56.70                          
    ErrorLog "/var/log/httpd/mainsite.example.com-error_log"            
    CustomLog "/var/log/httpd/mainsite.example.com-access_log" common   
</VirtualHost>                                                          
                                                                        
<VirtualHost *:443>                                                     
SSLEngine on                                                            
SSLCertificateFile /etc/pki/tls/certs/ca.crt                            
SSLCertificateKeyFile /etc/pki/tls/private/ca.key                       
    DocumentRoot "/var/www/html/mainsite"                               
    <Directory "/var/www/html/mainsite">                                
    AllowOverride None                                                  
    # Allow open access:                                                
    Require all granted                                                 
    </Directory>                                                        
                                                                        
    #DirectoryIndex "/var/www/html/mainsite/index.html"                 
    ServerName mainsite.example.com                                     
    ServerAlias mainsite                                                
    ErrorLog "/var/log/httpd/mainsite.example.com-error_log"            
    CustomLog "/var/log/httpd/mainsite.example.com-access_log" common   
</VirtualHost> 

E no servidor proxy reverso adicionei estas linhas para ativar o proxy reverso

<IfModule mod_proxy.c>
    ProxyRequests Off
    <Proxy *>
        Require all granted
    </Proxy>
    # backend server and forwarded path
    ProxyPreserveHost On
    ProxyPass / http://mainsite.example.com/
    ProxyPassReverse / http://mainsite.example.com/
</IfModule>

Se eu tentar abrir o URLhttp://192.168.56.71ele irá redirecionar parahttps://192.168.56.70o que é ok se eu não tiver um servidor proxy reverso, mas no cenário de proxy reverso deveria serhttps://192.168.56.71

Alguém pode orientar quais mudanças devo fazer no servidor proxy reverso para que o URL permaneçahttps://192.168.56.71se eu digitar URLhttp://192.168.56.71

Muito obrigado

Depois de implantar no Prod Server

Erro

[Mon May 31 09:16:26.650015 2021] [proxy_http:error] [pid 104179] (103)Software caused connection abort: [client 192.168.22.140:40286] AH01102: error reading status line from remote server 172.16.1.140:443
[Mon May 31 09:16:26.650214 2021] [proxy:error] [pid 104179] [client 192.168.22.140:40286] AH00898: Error reading from remote server returned by /

Responder1

Você deve ter dois hosts virtuais no servidor proxy reverso. Eu recomendaria excluir as diretivas proxypass globais em um proxy reverso e especificá-las para cada host virtual.

O host virtual na porta 80 deve redirecionar para a porta 443 no mesmo host (areverseproxy.example.com) da mesma forma que você fez no servidor back-end. No entanto, ninguém deve mais entrar na porta 80 no backend, se você fizer o proxy reverso corretamente, a menos que o backend também seja acessível via internet.

O host virtual na porta 443 deve ter uma configuração de proxy reverso.

No proxy reverso você deve ter algo assim:

<VirtualHost *:80>                                                      
    ServerName areverseproxy.example.com                                     
    ServerAlias areverseproxy                                                
    Redirect permanent / https://192.168.56.71                          
    ErrorLog "/var/log/httpd/areverseproxy.example.com-error_log"            
    CustomLog "/var/log/httpd/areverseproxy.example.com-access_log" common   
</VirtualHost>

<VirtualHost *:443>
    ServerName areverseproxy.example.com   
    ServerAlias areverseproxy                                                

    ErrorLog "/var/log/httpsd/areverseproxy.example.com-error_log"            
    CustomLog "/var/log/httpsd/areverseproxy.example.com-access_log" common   

    SSLEngine on
    SSLCertificateKeyFile conf/ssl.key/areverseproxy.example.com.key
    SSLCertificateFile conf/ssl.crt/areverseproxy.example.com.crt

    SSLProxyEngine on
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerExpire off
    SSLProxyCheckPeerName off

    ProxyRequests off
    ProxyPreserveHost on
    ProxyPass / https://192.168.56.70:443/
    ProxyPassReverse / https://192.168.56.70:443/
</VirtualHost>

Você provavelmente não terá um certificado HTTPS válido no host backend. Portanto, você precisa de SSLProxyCheck*diretivas. Se o backend tiver certificados válidos com nomes, você poderá excluir SSLProxyCheck*as diretivas, mas nesse caso, as diretivas ProxyPasse ProxyPassReversenão devem apontar para um número IP, como no exemplo, mas para o nome do host do certificado.

Você também pode não precisar de HTTPS entre o proxyreverse e o backend, se eles estiverem na mesma rede protegida. Caso contrário, mantenha o HTTPS entre o proxy reverso e o back-end para proteger o tráfego.

Lembre-se de que os clientes se comunicarão apenas com o proxy reverso, por isso é importante que você tenha os certificados HTTPS corretos para o proxy reverso, não para o back-end.

informação relacionada