У меня такая конфигурация:
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;
}
}