.htaccess 在负载均衡器后面时对 REMOTE_ADDR 进行 RewriteCond 吗?

.htaccess 在负载均衡器后面时对 REMOTE_ADDR 进行 RewriteCond 吗?

我在负载均衡器后面有一个网络服务器。

我需要向 .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}

答案1

使用%{HTTP:X-FORWARDED-FOR}而不是%{REMOTE_ADDR}

答案2

你需要mod_rpaf。此模块将使用另一个标头(例如 x-forwarded-for)重写 apache 中的 REMOTE_ADDR。对于使 PHP 应用程序与负载平衡器配合使用非常有用。

答案3

答案4

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

相关内容