2012-02-14 34 views
1

我的網絡服務器前端有一個nginx負載均衡器,因此REMOTE_ADDR報頭正在被負載均衡器的ip覆蓋。在.htacess驗證中使用HTTP_X_REAL_IP

原始IP地址在HTTP_X_REAL_IP頭中。我知道我可以通過重寫規則獲得標題,但是在允許使用.htaccess Auth方法的情況下,是否還有一種方法可以使用http標題?

<Directory "/path/*"> 
    AuthType Basic 
    AuthName "Authentication Required" 
    AuthUserFile "/path/authfiles/www-app" 
    Require valid-user 
    ... 
    Allow from HTTP_X_REAL_IP 
</Directory> 

我試過Google搜索,但只有遇到setifenv(試過)並重寫規則。

謝謝

回答

1

Allow不允許你到一個HTTP頭傳遞給它,但它確實接受環境變量。你應該可以選擇env。變量爲RewriteCond/RewriteRule。我沒有測試過,但像這樣可以工作:

RewriteCond %{HTTP:HTTP_X_REAL_IP} ^.+$ 
RewriteRule .* - [env=real_ip:%0] 
Allow from env=real_ip 
+0

我已經試過了,但你能解釋我怎麼可以只允許某個IP ? RewriteCond%{HTTP:HTTP_X_REAL_IP} 213.xxx.xxx.xxx RewriteRule。* - [E = real_ip:%0] 允許來自E = real_ip – 2012-02-15 08:04:56

+0

我不太確定我是否理解此用例,但您可以將'^。+ $'部分改爲任何你想要的正則表達式,例如'^ 213。+ $'。 – 2012-02-15 09:16:52

0

使用此:

SetEnvIf X-Forwarded-For ^(%IP1|%IP2|%IP3)$ let_me_in 
Allow from env=let_me_in 

其中%IP1,IP2%,%IP3 - 您的IP地址。

當然,你可以根據需要改變正則表達式,或只是一個IP更換,或更多在這裏讀到: http://httpd.apache.org/docs/trunk/mod/mod_access_compat.html