2014-11-02 109 views
0

我有一個非常簡單的.htaccess文件:有時需要IP 127.0.0.1的作品,有時它不會

<RequireAll> 
    Require all granted 

    # require localhost 
    Require ip 127.0.0.1 
</RequireAll> 

和它的作品...有時!

有時,它會拋出我403,和error.log解釋說:

[客戶:: 1:65443] AH01630:客戶端通過服務器配置否認

爲什麼不會吧匹配該本地客戶端到Require ip 127.0.0.1規則?

回答

3

事實證明,Apache 2.4的Require與IP 完全匹配。如果您有多個IP地址別名localhost,則需要列出所有這些IP地址(或者使用特殊別名(如果存在),如下所述)。

在這種特殊情況下,error.log條目揭示了這一切:通過IPv6接口(ip == :: 1)連接的客戶端。這也需要白名單:

<RequireAll> 
    Require all granted 

    # require localhost 
    <RequireAny> 
     Require ip 127.0.0.1 
     Require ip ::1 
    </RequireAny> 
</RequireAll> 

任何建議是否有一個更簡單/更安全的方法來完成這個任務,非常歡迎!

更新

由於Helge Klein表明,Require local是要走的路:

<RequireAll> 
    Require all granted 

    # require localhost 
    Require local 
</RequireAll> 
+1

使用「需要本地」而不是列出IP地址。有關詳細信息,請參閱http://httpd.apache.org/docs/2.4/en/mod/mod_authz_host.html。 – 2016-11-05 22:42:26

+0

爲什麼你需要'要求所有授予'?如果你想限制到本地,只需要'需要本地'就足夠了,不是嗎? – Alexander 2017-11-05 22:50:06

0

要求所有授予是等價於:

Order allow,deny 
Allow from all 

從早期的Apache版本,它將網站向所有人開放。如果你的目的是阻止該網站給大家,除了某些IP地址,你應該用一個開始:

Require all denied 

您可以在這裏找到更多的信息:Upgrading to 2.4 from 2.2

0

我不使用的.htaccess因爲我有Apache安裝在我的工作站上,並且可以完全訪問http.conf文件。但是,對於像phpmyadmin的一個網站,我想限制人們從日誌,我有這樣的:

Require all denied 
Require ip 127.0.0.1 

第一行拒絕訪問每個人,包括我自己的工作站。 第二行將我的工作站localhost ip添加到僅允許的連接列表中。

RequireAll or RequireAny的關鍵詞。再次在.htaccess中可能需要這些標籤。

+0

嗨,歡迎來到StackOverflow!請注意:1)您正在建議我已經嘗試過的內容,2)您可以編輯您的其他答案,您不必發佈多個答案,並且3)請參閱[我的答案](http:// stackoverflow .com/a/26699007/2228771)已經解決了這個問題。 – Domi 2015-07-27 08:32:36

0
Require ip 127.0.0.1 
Require ip ::1 
+2

這似乎是一個合法的答案,但請添加*解釋*爲什麼它的作品,所以我們都可以學習!謝謝。 :) – Selfish 2015-11-15 16:24:27

相關問題