Я пытаюсь настроить конфигурацию 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 Unauthorized.
Что я вижу:
Независимо от 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
Как я могу внести в белый список определенный IP-адрес для пути в nginx?
В return
оператор обрабатывается в nginx rewrite фаза, который находится перед этапом доступа, на котором проверяется контроль доступа.
Чтобы решить эту проблему, введите реальную конфигурацию для вашего виртуального сервера вместо «тестовой». Например, установить документ root
и поставить index.html
файл в нем, или proxy_pass
в веб-приложение.