Nach der Bereitstellung auf dem Prod Server

Nach der Bereitstellung auf dem Prod Server

Ich habe vor, einen Reverse-Proxy mit Apache einzusetzen, aber bevor ich das in der Produktionsumgebung mache, habe ich versucht, es in meinem Heimlabor zu implementieren. Ich habe zwei VMs, die auf Redhat laufen.

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

auf dem Backend-Apache-Server habe ich einen virtuellen Host erstellt, die Inhalte dieses VHosts

<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> 

Und auf dem Reverse Proxy Server habe ich diese Zeilen hinzugefügt, um den Reverse Proxy zu aktivieren

<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>

Wenn ich versuche, die URL zu öffnenhttp://192.168.56.71Es erfolgt eine Weiterleitung zuhttps://192.168.56.70Das ist ok, wenn ich keinen Reverse-Proxy-Server habe, aber im Reverse-Proxy-Szenario sollte es seinhttps://192.168.56.71

Kann mir jemand sagen, welche Änderungen ich am Reverse-Proxy-Server vornehmen muss, damit die URL erhalten bleibt?https://192.168.56.71wenn ich eine URL eingebehttp://192.168.56.71

Vielen Dank

Nach der Bereitstellung auf dem Prod Server

Fehler

[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 /

Antwort1

Sie sollten zwei virtuelle Hosts auf dem Reverse-Proxy-Server haben. Ich würde empfehlen, globale Proxypass-Direktiven auf einem Reverse-Proxy zu löschen und sie für jeden virtuellen Host anzugeben.

Der virtuelle Host auf Port 80 sollte auf Port 443 auf demselben Host (areverseproxy.example.com) umleiten, so wie Sie es auf dem Backend-Server getan haben. Allerdings sollte niemand mehr Port 80 auf dem Backend eingeben, wenn Sie den Reverse-Proxy richtig eingerichtet haben, es sei denn, das Backend ist auch über das Internet erreichbar.

Der virtuelle Host auf Port 443 sollte über eine Reverse-Proxy-Konfiguration verfügen.

Auf dem Reverse-Proxy sollte etwa Folgendes stehen:

<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>

Sie haben wahrscheinlich kein gültiges HTTPS-Zertifikat auf dem Backend-Host. Daher benötigen Sie SSLProxyCheck*Anweisungen. Wenn das Backend gültige Zertifikate mit Namen hat, können Sie SSLProxyCheck*Anweisungen löschen. In diesem Fall sollten die Anweisungen ProxyPassund jedoch ProxyPassReversenicht wie im Beispiel auf eine IP-Nummer verweisen, sondern auf den Hostnamen aus dem Zertifikat.

Möglicherweise benötigen Sie auch kein HTTPS zwischen Proxy-Reverse und Backend, wenn sich diese im selben geschützten Netzwerk befinden. Wenn nicht, behalten Sie HTTPS zwischen Reverse-Proxy und Backend bei, um den Datenverkehr zu schützen.

Denken Sie daran, dass Clients nur mit dem Reverse-Proxy kommunizieren. Daher ist es wichtig, dass Sie über die richtigen HTTPS-Zertifikate für den Reverse-Proxy und nicht für das Backend verfügen.

verwandte Informationen