nginx 拒绝允许单个 IP

nginx 拒绝允许单个 IP

我正在尝试设置一个 nginx 配置,仅允许一个源 IP 访问/admin

我尝试了以下操作nginx.conf

user root;

events {
}

http {
  server {
    listen       5000;

    location /admin {
      allow 1.2.3.4;
      deny all;
      return 200;
    }
  }
}

我的期望是:

只有来自的请求1.2.3.4才会收到 200 OK 响应。其他请求将收到 403 Unauthorised。

我看到的是:

无论源 IP 是什么,我都会收到 200 OK 响应。

$ docker run -it -v /tmp/test/nginx.conf:/etc/nginx/nginx.conf -p 127.0.0.1:5000:5000 nginx:alpine
...
$ curl localhost:5000/admin -v
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 5000 (#0)
> GET /admin HTTP/1.1
> Host: localhost:5000
> User-Agent: curl/7.58.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: nginx/1.15.11
< Date: Sun, 14 Apr 2019 20:33:32 GMT
< Content-Type: text/plain
< Content-Length: 0
< Connection: keep-alive

如何将 nginx 中某个路径的某个 IP 地址列入白名单?

答案1

return语句在 nginx 重写中处理阶段,这是在检查访问控制的访问阶段之前。

要解决此问题,请为虚拟服务器设置真实配置,而不是“测试”配置。例如,设置一个文档rootindex.html在其中放置一个文件,或proxy_pass设置一个 Web 应用程序。

相关内容