web-dev-qa-db-ja.com

Tomcatリダイレクトが発生したときにhttpをhttpsに変更する方法

エラスティックbeanstalkシングルインスタンスを使用しています。したがって、Apacheが構成されており、Tomcatはhttpポート8080でリッスンしていません。Apacheはssl https443を使用して構成されています。

問題は、Tomcatがhttpを使用してリダイレクトすることです。しかし、httpをhttpsに変更するようにApacheを設定することはできません。その結果、混合コンテンツエラーが発生し、アプリケーションが機能しなくなります。

私はこれまでに次の設定を試しました:仮想ホスト*:80に

<IFModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/%$1 [R, L]
</IFModule>

また、私は試しました

RedirectMatch ^(/.*)$ https://thepennantrace.com/$1

両方とも機能しませんでした。

それを設定する正しい方法は何でしょうか? (アプリはFacebookを介して実行されています。直接アクセスした場合、エラーは表示されません)

4
maximus

これをアプリケーションレベルで解決することをお勧めします。新しい場所へのフルパスを構築する必要があります。これは、プロトコル(https)、ホスト名(要求ヘッダーから)、およびパス(アプリケーションで必要な場合)の3つのコンポーネントで構成されている必要があります。一貫性を確保するために、アプリケーションのリンクを構築するユーティリティクラスが必要になる場合があります。

リンクの場合、相対パスを使用することをお勧めします。これらは、到着したプロトコルを使用して発信元のホストに送信されます。

リダイレクトの結果としてリクエストをリダイレクトしても、コンテンツが混在したままになります。これは、最初のリダイレクトがhttpsではなくhttpになるためです。

Apacheサーバーレベルでは、応答のパスをhttpからhttpsに書き換えるモジュールがあります。これは、アプリケーションによって送信された壊れたリンクを修正する1つの方法です。ただし、アクセスできないアプリケーションに限定します。

1
BillThor

リダイレクトでhttphttpsに変更するディレクティブはProxyPassReverseであり、関連する構成は次のとおりです。

<virtualhost *:80>
redirect   permanent  /    https://example.com
</virtualhost>

<virtualhost *:443>
ProxyPass        /app/     http://my-Tomcat:8080/app/
ProxyPassReverse /app/     http://my-Tomcat:8080/app/

...
## don't use ProxyPreserveHost ON as it breaks ProxyPassReverse

</virtualhost>

はい、RewriteEngineを使用してこれを行うことができますが、複雑であるため読み取りできません。

1
kubanczyk