仅允许 nginx 中的本地用户

仅允许 nginx 中的本地用户

我想限制某些 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 仅对本地用户访问!

相关内容