私は A.domain.com をホストする Apache Web サーバーを備えた WAN-IP を 1 つ持っており、同じローカル ネットワーク内の別のサーバーに B.domain.com をリバース プロキシします。
SSL がない場合、私は vhosts で次のように解決しました:
<VirtualHost *:80>
ServerName Z.domain.com
ProxyRequests Off
ProxyPass / http://1.1.1.7/
ProxyPassReverse / http://1.1.1.7/
しかし、SSL が有効になっていると、この方法では動作しません...
理解を深めるために描いてみました:
-- A.domain.com(local IP:1.1.1.1) | WAN --¦Firewall (NAT to 1.1.1.1) ¦-- LAN | -- B.domain.com(local IP:1.1.1.2)
サーバー 1.1.1.1 は 1.1.1.2 にリダイレクトされる必要があります
私の設定 /etc/apache2/sites-available/B.domain.com.conf:
<VirtualHost *:443>
ServerName B.domain.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/B.domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/B.domain.com/privkey.pem
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / https://1.1.1.2/
ProxyPassReverse / https://1.1.1.2/
</VirtualHost>
次のようにして有効化しa2ensite B.domain.com
、Apache を再起動しました。サイトを呼び出すと、結果は内部サーバー エラーになります。 がない場合も同じエラーが発生します。
電話すればapache2ctl -S
大丈夫そうです。
答え1
ezra-s からの情報「SSLProxyEngine on」を試しましたが、まだエラーが発生します:
プロキシサーバーはリクエストGETを処理できませんでした /
理由: リモート サーバーとの SSL ハンドシェイク中にエラーが発生しました
少し検索した後、有効な解決策を見つけました。
私の設定 /etc/apache2/sites-available/B.domain.com.conf は現在次のようになっています:
<VirtualHost *:443>
ServerName B.domain.com
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
SSLCertificateFile /etc/letsencrypt/live/B.domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/B.domain.com/privkey.pem
ProxyPass / https://1.1.1.2/
ProxyPassReverse / https://1.1.1.2/
しかし、外部からの接続は今でも安全でしょうか?
答え2
もっと簡単な方法を試して、ProxyPasshttps
を に変更してくださいhttp
。
ProxyPass / http://1.1.1.2/
ProxyPassReverse / http://1.1.1.2/
これはフロントエンド(つまりリバースプロキシ) を使用して、1.1.1.0 ネットを適切に保護している場合は、プレーン HTTP でバックエンドと通信します。
おそらく、1.1.1.2 に https サーバーをまったく実装していないのでしょう... この場合、説明されている内部エラー 50x の症状が発生します。