nginx, почему auth_request нельзя использовать в разделе if

java nginx

636 просмотра

1 ответ

76 Репутация автора

Я пытаюсь сделать пользовательский запрос аутентификации только для метода POST в Nginx. И я нашел модуль auth_request, поэтому я написал что-то вроде этого:

location /api/books {
  if ($request_method = GET) {
     proxy_pass http://bookservice;
  }
  auth_request /api/auth;
  proxy_pass http://bookservice;
}
location /api/auth {
  proxy_pass http://authservice;
}

bookservice и authservice - это два восходящих потока. Я сначала попробовал это, это не работает: каждый раз, когда есть GET / api / books, он запускает подзапрос для службы аутентификации. Ожидаемое поведение: когда это GET / api / books, он НЕ запускает подзапрос для службы авторизации, в противном случае он запускает подзапрос для службы аутентификации.

Поэтому я написал что-то вроде:

location /api/books {
  if ($request_method = GET) {
     proxy_pass http://bookservice;
  }
  if ($request_method = POST) {
    auth_request /api/auth;
    proxy_pass http://bookservice;
  }
}
location /api/auth {
  proxy_pass http://authservice;
}

Но при перезагрузке конфигурации он говорит: директива auth_request здесь не разрешена.

Я понимаю, что auth_request не может быть, если он может быть только в местоположении, сервере, http. Но как достичь моей цели, и почему ее нельзя применять внутри, если?

Автор: koly Источник Размещён: 18.07.2016 07:44

Ответы (1)


2 плюса

26 Репутация автора

Я сделал что-то подобное сегодня. Пришли к этому решению:

location /api/books {
    if ($request_method = POST) {
        rewrite .* /_api/books last;
    }
    proxy_pass http://bookservice;
}

location /_api/books {
    rewrite .* /api/books break;
    auth_request /api/auth;
    proxy_pass http://bookservice;
}

http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

Было бы намного лучше с if, но я не знаю, почему это не разрешено. Однако «if» не рекомендуется nginx ( https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ ).

Автор: user3784889 Размещён: 12.01.2019 01:43
Вопросы из категории :
32x32