Привет у меня есть 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;
}
}
Сопоставление местоположения выполняется по нормализованному 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;
}