Расположение Nginx для подстраниц за url "?"

Я пытаюсь поместить htpasswd только для группы подстраниц под этим url:

https://exemple.com/doku.php?id=staff

Так что, например, эта страница должна быть включена:

https://exemple.com/doku.php?id=staff:modo

Я пытался сделать это в nginx:

location ~ ^/doku.php?id=staff(.*) {

   auth_basic "Staff only";
   auth_basic_user_file /etc/nginx/.htpasswd/.htpasswd-staff;
}

Но нет никаких действий, даже на главной странице exemple.com/doku.php?id=staff

Я попробовал также это:

location ~ ^/doku.php(.*) {

  if ( $query_string = "id=staff" ) {
    auth_basic "Staff only";
    auth_basic_user_file /etc/nginx/.htpasswd/.htpasswd-staff;
  }
}

Но не могу перезагрузить nginx с ошибкой:

nginx: [emerg] "auth_basic" directive is not allowed here in /etc/nginx/conf.d/site.conf:31

Что я пропустил?

0
задан 5 September 2017 в 16:43
1 ответ

Я не тестировал это сам, но думаю, что это можно реализовать с помощью директивы map :

http {
    map $arg_id $authrequired {
        default off;
        staff "Staff only";
    }
}

server {
    location /doku.php {
        auth_basic $authrequired;
        auth_basic_user_file /etc/nginx/.htpasswd/.htpasswd-staff;
    }
}

Директива map заставляет nginx присваивать разные значения параметру $ authrequired переменная в зависимости от значения аргумента запроса id . Значение по умолчанию выключено, и когда id содержит «Staff», $ authrequired становится «Только Staff».

Затем мы используем эту переменную для директивы auth_basic .

0
ответ дан 24 November 2019 в 03:54

Теги

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