Обеспечение API REST с NGINX

Привет у меня есть API позади NGINX. API настроен для требования аутентификации для всех действий. Я хочу иметь прокси NGINX перед ним для передачи параметров аутентификации для некоторых действий, таким образом, они могут быть доступными без аутентификации.

Аутентификация хорошо работает на основном местоположении, однако когда я пытаюсь указать определенный путь в месте NGXINX, это все еще предлагает мне учетные данные.

Важная вещь здесь состоит в том, что единственным действием, которое я хочу позволить, является СОСТОЯНИЕ. Все остальное не должно быть взято вторым местоположением.

Существует ли способ сделать это без соответствия regex или PCRE?

    location / {
            add_header 'Access-Control-Allow-Origin' *;
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Headers' 'Content-Type,Accept';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header X-Proxy-Cache $upstream_cache_status;
            proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
            proxy_hide_header Cache-Control;
            proxy_hide_header Set-Cookie;
            proxy_pass http://backend;
             add_header 'Location1' '1';

         location /1/2/3?action=STATUS {
                add_header 'Location2' '2';
                proxy_set_header Authorization "Basic BLAHBLAHBLAH";
                proxy_pass http://backend;

        }

    }
1
задан 17 October 2014 в 19:23
1 ответ

Сопоставление местоположения выполняется по нормализованному URI, не содержащему строки запроса.

Поэтому в этом случае необходимо использовать блок if:

location /1/2/3 {

    if ($arg_action != "STATUS") {
        return 403;
    }

    add_header 'Location2' '2';
    proxy_set_header Authorization "Basic BLAHBLAHBLAH";
    proxy_pass http://backend;

}
1
ответ дан 4 December 2019 в 00:17

Теги

Похожие вопросы