Apacheリバースプロキシ - 単一ドメインを複数のIPに設定する方法

Apacheリバースプロキシ - 単一ドメインを複数のIPに設定する方法

Apache 2.4でDebian 10を使用する

いくつかの仮想マシンを実行しているサーバーがあります。 Webからアクセスできるようにしたいが、ドメイン名と無料のSSL証明書(高価なワイルドカード証明書ではない)を使用してURL文字列の右半分(後ろに「.com」)を使用してマッピングする必要があるIPを区別します。

私が理解しているのは、リバースプロキシがこれを達成することです。しかし、設定しようとすると失敗します。https://mydomain.com/nextcloudまたはhttps://mydomain.com/rocketchat

ルートレベル(https://mydomain.com) /var/www/html/からインデックスページを取得します。したがって、リバースプロキシは効果がありません。

だから私の質問は:default-ssl.confファイルを操作するにはどのようにエンコードする必要がありますか?

私は次のことを試しました:

ProxyPreserveHost On
ProxyPass         /rocketchat/         http://192.168.1.33:3000/
ProxyPassReverse  /rocketchat/         http://192.168.1.33:3000/

ProxyPass         /nextcloud/     http://192.168.1.16/nextcloud/
ProxyPassReverse  /nextcloud/     http://192.168.1.16/nextcloud/

私が望むことの例:

もし私が行くならhttps://mydomain.com/nextcloudその後、192.168.1.16に接続します。

もし私が行くならhttps://mydomain.com/rocketchatその後、192.168.1.33:3000に接続します。


私は問題を把握しようとしています。この図が私が望むことをしっかりとするのに役立つことを願っています。

チャート


編集:Apacheエラーログ(v61.localシステムはロケットチャットシステムです):

[Tue Apr 27 17:23:44.975875 2021] [ssl:error] [pid 22473] [remote 192.168.1.16:443] AH01961: SSL Proxy requested for v61.local:443 but not enabled [Hint: SSLProxyEngine]
[Tue Apr 27 17:23:44.976000 2021] [proxy:error] [pid 22473] AH00961: HTTPS: failed to enable ssl support for 192.168.1.16:443 (192.168.1.16)
[Tue Apr 27 17:27:16.346092 2021] [mpm_prefork:notice] [pid 22340] AH00169: caught SIGTERM, shutting down
[Tue Apr 27 17:27:16.488467 2021] [ssl:warn] [pid 22634] AH01909: v61.local:443:0 server certificate does NOT include an ID which matches the server name
[Tue Apr 27 17:27:16.577206 2021] [ssl:warn] [pid 22636] AH01909: v61.local:443:0 server certificate does NOT include an ID which matches the server name
[Tue Apr 27 17:27:16.587100 2021] [mpm_prefork:notice] [pid 22636] AH00163: Apache/2.4.38 (Debian) OpenSSL/1.1.1d configured -- resuming normal operations
[Tue Apr 27 17:27:16.587260 2021] [core:notice] [pid 22636] AH00094: Command line: '/usr/sbin/apache2'
[Tue Apr 27 17:27:39.035976 2021] [mpm_prefork:notice] [pid 22636] AH00169: caught SIGTERM, shutting down
[Tue Apr 27 17:27:39.165342 2021] [ssl:warn] [pid 22653] AH01909: v61.local:443:0 server certificate does NOT include an ID which matches the server name
[Tue Apr 27 17:27:39.269657 2021] [ssl:warn] [pid 22655] AH01909: v61.local:443:0 server certificate does NOT include an ID which matches the server name
[Tue Apr 27 17:27:39.286080 2021] [mpm_prefork:notice] [pid 22655] AH00163: Apache/2.4.38 (Debian) OpenSSL/1.1.1d configured -- resuming normal operations
[Tue Apr 27 17:27:39.286292 2021] [core:notice] [pid 22655] AH00094: Command line: '/usr/sbin/apache2'
[Tue Apr 27 17:27:44.967985 2021] [ssl:error] [pid 22656] [remote 192.168.1.16:443] AH01961: SSL Proxy requested for v61.local:443 but not enabled [Hint: SSLProxyEngine]
[Tue Apr 27 17:27:44.968100 2021] [proxy:error] [pid 22656] AH00961: HTTPS: failed to enable ssl support for 192.168.1.16:443 (192.168.1.16)
[Tue Apr 27 17:27:47.329941 2021] [ssl:error] [pid 22657] [remote 192.168.1.16:443] AH01961: SSL Proxy requested for v61.local:443 but not enabled [Hint: SSLProxyEngine]

答え1

ほぼすべて来ました。あなたはテスト中ですhttps://mydomain.com/nextcloudしかし、テストをしなければなりません。https://mydomain.com/nextcloud/(先端にスラッシュがあることに注意してください)。

その理由は、ディレクトリがないため、自動「ディレクトリを/var/www/html/nextcloud処理するために末尾のスラッシュを追加します」コードがトリガーされず、代わりに404が表示されるためです。

持っていればhttps://mydomain.com/nextcloud/機能するには、リダイレクトするルールが必要です。https://mydomain.com/nextcloud到着https://mydomain.com/nextcloud/(ディレクトリを作成nextcloudまたは使用してください。これがよりクリーンなソリューションではRedirectない場合は問題ありません。)Redirect

答え2

Apacheの設定は、プロキシされるWebアプリケーションによって大きく異なります。 Webアプリケーションが以下を使用している場合は、追加のディレクティブが必要になる場合があります。websockets、例えば、最近では非常に一般的なものです。さらに、多くのWebアプリケーションはHTTPホスト内のディレクトリパスでの実行をサポートしておらず、/ルートルート全体を独自に所有していると暗黙的に想定しています。たとえば、パス上でこれらのアプリケーションを実行するには、/webappWebアプリケーションの内部と慎重に作成されたいくつかのApache書き換え規則の深い理解が必要です。

しかし、偶然にnextcloudがこれらの設定をサポートしていることを知っています。必ず必要ですがそれに応じてnextcloud自体を設定します。。 Rocketcatについてはあまり話すことができません。すべてのWebアプリケーションに適用される汎用構成はありません。各Webアプリケーションのドキュメントを参照する必要があるようです。それでも、アプリケーションが全体(サブ)ドメインにデプロイされるように設計されていると、予期しない動作が発生する可能性があります。

つまり、同じ(サブ)ドメイン内のパスでnextcloudやRocketchatなどの複雑なアプリケーションを実行しないように強くお勧めします。基本的に同じ原産地方針、これらのアプリケーションは最終的に大きなセキュリティ問題である認証クッキーを含むお互いのリソースにアクセスすることができます。

ワイルドカード証明書は「高価ではありません」。実際、Let's Encryptは完全に無料です(DNS-01チャレンジ)、あなたがドメインを所有し、DNSレコードを制御する場合に限ります。

関連情報