Назад | Перейти на главную страницу

Проблема с сопоставлением местоположения nginx auth_basic

У меня такая конфигурация:

location / {
    root /etc/nginx/euchet;
}

location /app/ {
    proxy_pass http://172.16.184.2:8080;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE_ADDR $remote_addr;
}

И мне нужно добавить другое местоположение с auth_basic включен только для запроса: /app/f?p=3000

Я пробовал с rexexp:

   location ~ \/appt\/f\?p=3000 {
            auth_basic "Hello! Enter password";
            auth_basic_user_file /etc/nginx/euchet.htpasswd;

            proxy_pass http://172.16.184.2:8080;
            proxy_redirect off;

            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header REMOTE_ADDR $remote_addr;
    }

Nginx использует предыдущее местоположение /app/.

Я попробовал другой способ:

location ~* /euchet/f {

    if ($arg_p = "4550") {
        return 403;
    }

    error_page 403 = @hidden;
}


location @hidden {
            auth_basic "Hello! Enter password";
            auth_basic_user_file /etc/nginx/euchet.htpasswd;

            proxy_pass http://172.16.184.2:8080;
            proxy_redirect off;

            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header REMOTE_ADDR $remote_addr;
}

И я получаю ошибку 403 на f?p=3000, и 404 ошибки на f?p=<another_number>

Как я могу исправить эту проблему?

Лучше сделать это с помощью карта как auth_basic директива может содержать переменные.

map $request_uri $auth {
    default         "off";
    "/app/f?p=3000" "MyRealm";
}


server {

    location / {
        root /etc/nginx/euchet;
    }

    location /app/ {
        auth_basic $auth;
        auth_basic_user_file /etc/nginx/euchet.htpasswd;
        proxy_pass http://172.16.184.2:8080;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE_ADDR $remote_addr;
    }   

}