.htaccess RewriteCond для REMOTE_ADDR, находясь за балансировщиком нагрузки?

9

У меня есть веб-сервер за балансировщиком нагрузки.

Мне нужно добавить условное перенаправление в мой .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]

Однако, поскольку мой веб-сервер находится за балансировщиком нагрузки, 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} является правильным. Это чувствительно к регистру?
Джефф Странк
Все шапки работали на меня. Я предполагаю, что это не чувствительно к регистру или иначе это псевдоним или что-то.
Джейк Уилсон
Вы действительно служите .jpeили .jpфайлы?
7heo.tk

Ответы:

10

Используйте %{HTTP:X-FORWARDED-FOR}вместо%{REMOTE_ADDR}

Райан
источник
Я знаю, что вы уже ответили на него в своем вопросе, но у вас не было ответа ниже соответствующего. Спасибо за ваш ответ! Спас меня сегодня.
Райан
2

Вам нужен mod_rpaf . Этот модуль перезапишет REMOTE_ADDR в apache с другим заголовком, например, x-forwarded-for. Очень полезно для того, чтобы PHP-приложения работали с балансировщиками нагрузки.

Мэтью Ифе
источник
0

Если у вас две среды, скажем, одно производство находится за балансом нагрузки, а разработка или этап не за балансом нагрузки, и вы хотите использовать один и тот же файл .htaccess, вам потребуются оба% {HTTP: X-FORWARDED-FOR} и % {REMOTE_ADDR} - назначить IP-адреса обоим условиям.

Эндрю С
источник
1
Кроме того, на некоторых серверах Apache обратная косая черта может сбить сервер с толку. Проще говоря! ^ 123.123.123.123 (без обратной косой черты, чтобы означать, если не IP 123.123.123.123), если вы не можете заставить работать итерацию с обратной косой чертой.
Эндрю С