NameVirtualHostsを使用してwwwにリダイレクトする場合、ELBヘルスチェックをどのように設定すればよいですか?


8

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]

これは実際のブラウザでは正常に機能しますが、302を取得しているためと思われますが、/へのHTTPヘルスチェックは失敗します。

TCPヘルスチェックを使用するのに最適なオプションはありますか、それともHTTPを機能させる方法はありますか?


AWSがヘルスチェックのために送信されるホストヘッダーのカスタマイズを許可するまで、TCPヘルスチェックを使用してください。ウェブサーバーにデフォルトのエントリがある場合でも、実際にアプリの状態をチェックするのではなく、TCPサーバーが開いているかどうかをチェックするのとほぼ同じウェブサーバーのみです。
Pykler

回答:


11

この質問は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。これを正しく設定する限り、通常のユーザーがリダイレクト応答を回避することはできません。


デフォルトの仮想ホストの設定に関する問題は、新しいインスタンスが起動または再起動されるたびにIPアドレスが変更されることであり、デフォルトのAMIにヘルスチェックのサポートを含めたいです。他のオプションを調べます。
2013年

含めたIPアドレスチェックでは、IPアドレスがで始まることのみをチェックしています10.。IPアドレスの残りの部分は好きなだけ変更でき、それらは引き続き一致します。10.*.*.*IPアドレスの(または10.0.0.0/8)の範囲は、インターネット上でルーティングできません。
Ladadadada 2013年

ELB IPではなくリクエスターのIPアドレスを記録するためにすでにリモートIPを使用しているため、3番目のオプションが機能しました-ありがとう!
chris

0

仮想ホストを反映するには、httpdサービスを再起動する必要があるため、仮想ホストを追加することはお勧めできません。これを行う別の方法があります

  1. .htaccessファイルのELBヘルスチェックパスを無視します。
    次のように、dns名の4つの部分すべてを区切ります
    。elb_dns_name:elb-name.subnet_zone.elb.amazonaws.com
  2. 残りのすべてのURLには内部書き換えルールがあります
    directory_scructure:code_folder / website

    RewriteCond時の
    RewriteEngine%{HTTP_HOST}!$ [NC]
    RewriteCond%{REQUEST_URI}!^ / index.php $
    RewriteRule ^(。*)$ / $ 1 [L、QSA]

これは私にとって非常にうまくいきました。より良い方法の応援があれば提案してください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.