我正在尝试设置一个 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 重写中处理阶段,这是在检查访问控制的访问阶段之前。
要解决此问题,请为虚拟服务器设置真实配置,而不是“测试”配置。例如,设置一个文档root
并index.html
在其中放置一个文件,或proxy_pass
设置一个 Web 应用程序。