エラスティック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を介して実行されています。直接アクセスした場合、エラーは表示されません)
これをアプリケーションレベルで解決することをお勧めします。新しい場所へのフルパスを構築する必要があります。これは、プロトコル(https)、ホスト名(要求ヘッダーから)、およびパス(アプリケーションで必要な場合)の3つのコンポーネントで構成されている必要があります。一貫性を確保するために、アプリケーションのリンクを構築するユーティリティクラスが必要になる場合があります。
リンクの場合、相対パスを使用することをお勧めします。これらは、到着したプロトコルを使用して発信元のホストに送信されます。
リダイレクトの結果としてリクエストをリダイレクトしても、コンテンツが混在したままになります。これは、最初のリダイレクトがhttpsではなくhttpになるためです。
Apacheサーバーレベルでは、応答のパスをhttpからhttpsに書き換えるモジュールがあります。これは、アプリケーションによって送信された壊れたリンクを修正する1つの方法です。ただし、アクセスできないアプリケーションに限定します。
リダイレクトでhttp
をhttps
に変更するディレクティブは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
を使用してこれを行うことができますが、複雑であるため読み取りできません。