HTTPヘルスチェックが失敗しているため、ELBはインスタンスをサービスから外し続けています。
DNSワイルドカードがあり、すべてをwwwにリダイレクトします。
vhost.conf:
ServerName www.example.com
ServerAlias *.example.com
RewriteEngine on
RewriteCond %{HTTP_Host} !^www\.example\.com$ [NC]
RewriteRule ^ http://www.example.com/$1 [R=301,L]
これは実際のブラウザでは問題なく機能しますが、/へのHTTPヘルスチェックは失敗します。これはおそらく302を取得しているためです。
TCPヘルスチェックを使用する最善のオプションですか、それともHTTPを機能させる方法はありますか?
この質問は AWSフォーラムで尋ねられました であり、答えは、裸のIPアドレスのトラフィックを処理し、リダイレクトを行わないデフォルトの仮想ホストを設定することでした。これは、IPアドレスにヒットした通常のユーザーもリダイレクトされないことを意味します。
または、ELBに要求するURLのパス部分を指定し、別のRewriteCondを追加してそのパスを無視することもできます。
RewriteCond %{HTTP_Host} !^www\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/health-check$
RewriteRule ^ http://www.example.com/$1 [R=301,L]
そのURLにアクセスした通常のユーザーはリダイレクトされません。
同じ手法を使用して、ELBのユーザーエージェントを検出することもできます。
RewriteCond %{HTTP_Host} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteRule ^ http://www.example.com/$1 [R=301,L]
User-Agentを偽装する通常のユーザーはリダイレクトされません。
または、ELBの内部IPアドレス。
RewriteCond %{HTTP_Host} !^www\.example\.com$ [NC]
RewriteCond %{REMOTE_ADDR} !^10\.
RewriteRule ^ http://www.example.com/$1 [R=301,L]
このオプションを機能させるには、mod_rpaf
(Apache 2.2の場合)またはmod_remoteip
(Apache 2.4の場合)REMOTE_ADDR
変数の内容の正しい部分を含むX-Forwarded-For
ヘッダー。これを正しく設定する限り、通常のユーザーがリダイレクト応答を回避することはできません。
仮想ホストを反映するには、httpdサービスを再起動する必要があるため、仮想ホストを追加することはお勧めできません。これを行う別の方法があります
残りのすべてのURLには内部書き換えルールがあります
directory_scructure:code_folder/website
RewriteEngine On
RewriteCond%{HTTP_Host}!$ [NC]
RewriteCond%{REQUEST_URI}!^/index.php $
RewriteRule ^(。*)$/$ 1 [L、QSA]
これは私にとって非常にうまくいきました。よりよい方法の応援があれば提案してください!