对我的服务器的访问控制是这样定义的:
Order allow,deny Allow from 127.0.0.1
而且这是我想要的方式。 首先,只允许从本地机器访问,然后一切都被拒绝。 但是我发现了很多可以做这样的事情的例子:
Order deny,allow Deny from all Allow from 127.0.0.1
这更有意义。 首先,所有访问都被拒绝,然后只允许本地访问。
我的问题是,他们是否相同,做同样的事情? 他们的方式我看,但我只是想确保他们是完全一样的。 如果不是,他们有什么不同,我应该去哪个只允许访问我的本地机器?
是的,它们在提供相同结果方面是等同的,只允许从127.0.0.1访问。 让我引用订单指令文档中的相关部分。
允许否认
首先,评估所有Allow指令; 至less一个必须匹配,否则请求被拒绝。 接下来,所有Deny指令都被评估。 如果有任何匹配,请求被拒绝。 最后,默认情况下,拒绝任何不符合Allow或Deny指令的请求。
否认允许
首先,评估所有拒绝指令; 如果匹配,请求将被拒绝,除非它也匹配Allow指令。 任何不符合任何允许或拒绝指令的请求都是允许的。
我不相信它们实际上是相同的,因为在你的第一个例子中,你不明确地否认任何主机(不确定Apache默认是什么)。
你显示的第二个更正规的例子是正确的,只允许本地主机访问Web服务器。 这是因为Apache中的访问控制指令是按Order指令使用的顺序应用的。 所以用“拒绝,允许”首先应用拒绝指令,然后是任何允许指令。 在这种情况下,首先阻塞所有主机,然后允许127.0.0.1。 除了本地主机外,其他任何东西都不能进入 如果您只是反转了“允许,拒绝”的顺序,这将意味着首先允许127.0.0.1,则所有主机都被阻止。 意思根本没有人可以到达Web服务器(甚至不是本地主机)!
把它想象成白名单或黑名单。 在“拒绝,允许”的情况下,您从本质上创build了一个您希望能够访问服务器的用户的白名单,并添加了每个允许添加的X. 如果您在允许来自所有方面使用“允许,拒绝”并添加从X拒绝,您创build一个黑名单,你特别不希望能够访问Web服务器的人。