Prod Server에 배포한 후

Prod Server에 배포한 후

Apache를 사용하여 역방향 프록시를 배포할 계획이었지만 Prod env에서 수행하기 전에 홈 랩에서 구현하려고 했습니다. Redhat에서 실행 중인 두 개의 vms가 있습니다.

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

백엔드 Apache 서버에서 가상 호스트를 만들었고 해당 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> 

그리고 역방향 프록시 서버에서 역방향 프록시를 활성화하기 위해 다음 줄을 추가했습니다.

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

URL을 열려고 하면http://192.168.56.71다음으로 리디렉션됩니다.https://192.168.56.70역방향 프록시 서버가 없어도 괜찮지만 역방향 프록시 시나리오에서는 그래야 합니다.https://192.168.56.71

URl이 유지되도록 역방향 프록시 서버에서 변경해야 하는 사항을 안내할 수 있습니까?https://192.168.56.71내가 URL을 입력하면http://192.168.56.71

정말 감사합니다

Prod Server에 배포한 후

오류

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

답변1

역방향 프록시 서버에는 두 개의 가상 호스트가 있어야 합니다. 역방향 프록시에서 전역 Proxypass 지시문을 삭제하고 각 가상 호스트에 대해 지정하는 것이 좋습니다.

포트 80의 가상 호스트는 백엔드 서버에서와 동일한 방식으로 동일한 호스트(areverseproxy.example.com)의 포트 443으로 리디렉션되어야 합니다. 그러나 인터넷을 통해 백엔드에 액세스할 수 없다면 역방향 프록시를 올바르게 만든 경우 누구도 더 이상 백엔드에 80 포트를 입력해서는 안 됩니다.

포트 443의 가상 호스트에는 역방향 프록시 구성이 있어야 합니다.

역방향 프록시에는 다음과 같은 내용이 있어야 합니다.

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

백엔드 호스트에 유효한 HTTPS 인증서가 없을 수도 있습니다. 따라서 SSLProxyCheck*지시어가 필요합니다. 백엔드에 이름이 있는 유효한 인증서가 있는 경우 SSLProxyCheck*지시문을 삭제할 수 있지만 이 경우 ProxyPassProxyPassReverse지시문은 예제와 같이 IP 번호가 아니라 인증서의 호스트 이름을 가리켜야 합니다.

또한 동일한 보호 네트워크에 있는 경우 Proxyreverse와 백엔드 사이에 HTTPS가 필요하지 않을 수도 있습니다. 그렇지 않은 경우 역방향 프록시와 백엔드 사이에 HTTPS를 유지하여 트래픽을 보호하세요.

클라이언트는 역방향 프록시와만 통신하므로 백엔드가 아닌 역방향 프록시에 대해 올바른 HTTPS 인증서를 보유하는 것이 중요합니다.

관련 정보