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証明書を保持することが重要です。