ロードバランサーの背後にあるREMOTE_ADDRの.htaccess RewriteCond?


9

ロードバランサーの背後にWebサーバーがあります。

メンテナンスのためにサイトをオフラインにするたびにメンテナンスページを表示するには、.htaccessに条件付きリダイレクトを追加する必要があります。この部分は簡単です:

RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.php$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.php [R=302,L]

ただし、訪問者のIPアドレスが自分のものである場合は、メンテナンスページにリダイレクトされず、オンラインであるかのようにサイトを表示およびテストできるという条件を追加します。この部分も通常は簡単です。

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^11\.111\.111\.111
RewriteCond %{REQUEST_URI} !/maintenance.php$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.php [R=302,L]

ただし、私のWebサーバーはロードバランサーの背後にあるため、REMOTE_ADDRロードバランスサーバーの内部IPアドレスに解決されます。

これを変更して、転送されたIPアドレスを探すにはどうすればよいですか?私はPHPで$_SERVER['HTTP_X_FORWARDED_FOR']転送されたIPアドレスを取得するために使用できることを知っています。私はいくつかのことを試しました.htaccessが、うまくいきませんでした:

%{X_FORWARDED_FOR}
%{HTTP:X_FORWARDED_FOR}
%{HTTP_X_FORWARDED_FOR}

解決

私は以下を機能させました:

%{HTTP:X-FORWARDED-FOR}

%{HTTP:X-Forwarded-For}が正しいものです。大文字と小文字は区別されますか?
ジェフStrunk

すべてのキャップが私のために働いた。大文字と小文字を区別しないか、エイリアスか何かだと思います。
ジェイクウィルソン

あなたは本当にサービス.jpe.jpファイルをしますか?
7heo.tk

回答:


10

%{HTTP:X-FORWARDED-FOR}代わりに使用%{REMOTE_ADDR}


あなたはすでにあなたの質問でそれを答えましたが、あなたは一致する以下の答えを持っていませんでした。回答ありがとうございます!今日私を救った。
Ryan

2

mod_rpafが必要です。このモジュールは、x-forwarded-forなどの別のヘッダーを使用して、ApacheのREMOTE_ADDRを書き換えます。PHPアプリをロードバランサーで動作させるのに非常に役立ちます。



0

2つの環境があり、1つのプロダクションがロードバランスの背後にあり、開発またはステージングがロードバランスの背後にない場合、同じ.htaccessファイルを使用するには、%{HTTP:X-FORWARDED-FOR}と%{REMOTE_ADDR}-両方の条件にIPアドレスを割り当てます。


1
また、一部のApacheサーバーでは、バックスラッシュがサーバーを混乱させます。バックスラッシュを使用した反復が機能しない場合は、単に!^ 123.123.123.123(バックスラッシュなし、つまりIP 123.123.123.123でない場合)を挿入します。
アンドリューS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.