web-dev-qa-db-ja.com

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

ロードバランサーの背後に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アドレスが自分の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=で使用できることを知っています。転送されたIPアドレスを取得するために$_SERVER['HTTP_X_FORWARDED_FOR']を使用できます。私は.htaccessでいくつかのことを試みましたが、運はありません:

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

[〜#〜]ソリューション[〜#〜]

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

%{HTTP:X-FORWARDED-FOR}
9
Jake Wilson

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

9
Ryan

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

2
Matthew Ife
0
mauilion

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

0
Andrew S