Prod Server에 배포한 후

Prod Server에 배포한 후

Apache를 사용하여 역방향 프록시를 배포할 계획이지만 Prod env에 배포하기 전에 홈 랩에서 구현하려고 합니다. 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

백엔드 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.71URL을 입력하면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 인증서를 보유하는 것이 중요합니다.

관련 정보