我想限制某些 VHost 的访问,以便只有 127.0.0.1 可以访问它。我总是使用类似这样的方法将 VHost 绑定到本地主机而不是外部 IP:
server {
listen 127.0.0.1;
server_name myvhost.local;
location / {
....
}
}
但我注意到一些教程还包括allow
针对本地主机的明确指令,并明确拒绝所有其他指令:
server {
listen 127.0.0.1;
server_name myvhost.local;
location / {
allow 127.0.0.1;
deny all;
...
}
}
当我只在 127.0.0.1 上监听时,这些allow
/指令真的需要吗?deny
答案1
该listen
指令告诉操作系统 Web 服务器将自身绑定到哪个接口上。因此,netstat -a
启动 nginx 后,您会看到 nginx 仅在 127.0.0.1 IP 端口 80 上侦听,这意味着无法通过任何其他接口访问 nginx 服务器。
绑定到特定 IP 地址在实际网络堆栈中的工作级别比nginx 配置中的allow
/指令要低。deny
这意味着您不需要在配置中使用单独的allow
/指令,因为网络堆栈中的连接受到较低的限制。deny
如果您listen 80;
仅指定并使用allow
/deny
指令,那么 nginx 将向客户端发送 HTTP 错误代码,告知访问被拒绝。
在这种listen 127.0.0.1;
情况下,浏览器根本无法连接到服务器,因为没有打开 TCP 端口供浏览器连接。
答案2
假设你的网络 ID 是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 维基他们的例子是:
location / {
allow 192.168.1.1/24;
allow 127.0.0.1;
deny 192.168.1.2;
deny all;
}
答案3
我想要实现相同的功能(仅允许 nginx 中的本地用户),我发现我可以做一些简单的事情,例如:
server {
listen 127.0.0.1:80;
index index.html index.htm index.nginx-debian.html;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /path/to/folder;
}
location / {
include proxy_params;
}
}
这个配置文件对我来说工作正常,我没有使用任何allow
指令,而只是使用127.0.0.1:80
,并且我能够限制 nginx 仅对本地用户访问!