Назад | Перейти на главную страницу

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 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 в веб-приложение.