Apache プロキシ / 1 つの IP で https を https にリダイレクトする

Apache プロキシ / 1 つの IP で https を https にリダイレクトする

私は 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 の症状が発生します。

関連情報