Prodサーバーにデプロイした後

Prodサーバーにデプロイした後

Apache を使用してリバース プロキシを展開することを計画していましたが、実稼働環境で実行する前に、自宅のラボで実装しようとしました。Redhat で実行されている VM が 2 つあります。

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サーバーにデプロイした後

エラー

[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

リバース プロキシ サーバーには 2 つの仮想ホストが必要です。リバース プロキシ上のグローバル 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*ディレクティブを削除できますが、その場合、ProxyPassおよびProxyPassReverseディレクティブは、例のように IP 番号ではなく、証明書のホスト名を指す必要があります。

また、リバース プロキシとバックエンドが同じ保護されたネットワーク上にある場合は、それらの間に HTTPS は必要ありません。そうでない場合は、トラフィックを保護するためにリバース プロキシとバックエンドの間で HTTPS を維持します。

クライアントはリバース プロキシとのみ通信するため、バックエンドではなくリバース プロキシに正しい HTTPS 証明書を用意することが重要です。

関連情報