Prod Serverにデプロイした後

Prod Serverにデプロイした後

Apacheを使用してリバースプロキシをデプロイする予定ですが、Prod envにデプロイする前にホームラボで実装しようとしています。 Redhatで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 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

リバースプロキシサーバーには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番号(例を参照)ではなく、証明書のホスト名を指す必要があります。

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

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

おすすめ記事