LINUX.ORG.RU
ФорумAdmin

nginx авторизация

 


0

2

Приветствую, коллеги! В конфиге nginx есть локейшн /app/, нужно сделать еще один локейшн /app/f?p=3000 с авторизацией, проблема в том, что сейчас при запросе я в этот локейшен не попадаю, а попадаю в /app/ и авторизация соответственно не работает. Уже пробовал и выше размещать и регулярные выражения писать. Сейчас так написано:

location ^~ /app/f\?p=4000
Что не так, подскажите?

Ответ на: комментарий от reddaemon

К сожалению, с енжиной порой приходится откровенно др... в присядку. Другой возможный вариант:

location /app/f {
    if ($arg_p) {
        return 418;
    }
    error_page 418 = @hidden;
}

location @hidden {
    auth_basic ...;
}
PS: используй фантазию. ;)

PPS: аргументы из query_string location'ами не ловятся. Приходится вот так извращаться.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

В зависимости от того, что тебе конкретно надо, можно просто забить на p=3000 и просто авторизировать всю location.

location /app/ {}
location ~ /app/f { auth_basic ...; }
beastie ★★★★★
()
Ответ на: комментарий от reddaemon

Дык, location'ы — они exclusive. Что словилось одним в другой уже не попадёт. Допиши в /app/f try_files или proxy_pass или root или alias или что там у тебя в главной location.

beastie ★★★★★
()
Ответ на: комментарий от beastie

Кстати, по поводу:

пробовал и выше размещать

Это без разницы. Конфиг у nginx декларативный — порядок не играет роли.

beastie ★★★★★
()
Ответ на: комментарий от beastie

как-то так?

       location /euchet/f {
               if ($arg_p = 3000) {
                      return 418;
              }
                proxy_pass http://x.x.x.x:8080;
                proxy_redirect off;

                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For     
                proxy_set_header REMOTE_ADDR $remote_addr;
                error_page 418 = @hidden;
       }

reddaemon
() автор топика
Ответ на: комментарий от reddaemon

В общем, как я себе это представляю, должно быть что-то вроде такого:

upstream app {
    server 127.0.0.1:8080;
}

server {
    # ...

    location / {
        try_files $uri @app;
        if ($arg_p = 3000) {
            return 418;
        }
        error_page 418 = @hidden;
    }

    location @app {
        proxy_pass http://app;
        include proxy_params;
    }

    location @hidden {
        auth_basic "restricted";
        auth_basic_user_file htpasswd;
        proxy_pass http://app;
        include proxy_params;
    }
}

Это, скажим так, не очень красиво. Но лучшего на ум пока что не приходит.

beastie ★★★★★
()
Ответ на: комментарий от beastie

У меня просто в / лежит index.html, который должен работать в обычном режиме, c него идут ссылки на f?p=, а f?p=3000 это админка и именно для нее нужна аторизация, для остальных нет

reddaemon
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.