我想限制某些VHost的访问权限,以便只有127.0.0.1才能访问它。 我总是用这样的东西来绑定VHost到本地主机而不是外部IP:
server { listen 127.0.0.1; server_name myvhost.local; location / { .... } }
但是我注意到一些教程还包含了localhost的显式allow
指令,并且明确地否认所有其他指令:
server { listen 127.0.0.1; server_name myvhost.local; location / { allow 127.0.0.1; deny all; ... } }
这些allow
/ deny
指令真的需要时,我只听127.0.0.1?
listen
指令告诉操作系统Web服务器绑定自己的接口。 所以,当你在启动nginx之后查看netstat -a
,你会发现nginx只在127.0.0.1 IP端口80上侦听,这意味着nginx服务器不能通过任何其他接口访问。
绑定到一个特定的IP地址在实际networking堆栈中的工作水平比在nginxconfiguration中的allow
/ deny
指令低。
这意味着你的用例不需要在你的configuration里面有单独的allow
/ deny
指令,因为在networking堆栈中连接的数量有限。
如果你指定listen 80;
只有使用allow
/ deny
指令,那么nginx会发送一个HTTP错误码给客户端,告诉访问被拒绝。
随着listen 127.0.0.1;
情况下,浏览器根本无法连接到服务器,因为没有打开TCP端口供浏览器连接。
假设您的networkingID是192.168.1.0
,请编辑您的conf文件,如下所示:
location / { # block one workstation deny 192.168.1.1; # allow anyone in 192.168.1.0/24 allow 192.168.1.0/24; # drop rest of the world deny all; }
请让我知道它是如何为你工作的。
编辑#1:
是的,根据官方的Nginx wiki ,allow指令是必须的。 他们的例子是:
location / { allow 192.168.1.1/24; allow 127.0.0.1; deny 192.168.1.2; deny all; }