.htaccess在负载均衡器后面是否有REMOTE_ADDR的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}是正确的。是否区分大小写?
Jeff Strunk

所有帽子为我工作。我猜它不区分大小写,否则是别名或其他名称。
杰克·威尔逊

您确实提供服务.jpe.jp归档吗?
7heo.tk

Answers:


10

使用%{HTTP:X-FORWARDED-FOR}代替%{REMOTE_ADDR}


我知道您已经在问题中回答了该问题,但是在匹配的问题之下您没有答案。谢谢您的回答!今天救了我
瑞安

2

您需要mod_rpaf。该模块将使用另一个标头(例如x-forward-for)在apache中重写REMOTE_ADDR。对于使PHP应用程序与负载均衡器一起使用非常有用。



0

如果您有两个环境,比如说一个生产在负载平衡之后,而开发或过渡不在负载平衡之后,并且您想使用相同的.htaccess文件,则将需要%{HTTP:X-FORWARDED-FOR}和%{REMOTE_ADDR}-为这两种情况分配IP地址。


1
同样,在某些apache服务器上,反斜杠会使服务器感到困惑。如果您无法使用反斜杠进行迭代,则只需输入!^ 123.123.123.123(不带反斜杠,表示不是IP 123.123.123.123)。
安德鲁·S
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.