Назад | Перейти на главную страницу

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

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

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

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

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