Обратный прокси-сервер Nginx с использованием модуля auth_request и внешнего API аутентификации - ошибка 404

Я пытаюсь настроить nginx как обратный прокси-сервер для защиты другого сервера (kibana) с помощью внешнего API аутентификации.

Это URL-адрес, по которому я должен войти в панель управления kibana - http://127.0.0.1/kibana_proxy?username=my.user&password=test67

После завершения аутентификации (например, статус https 200) nginx выдает ошибку 404. Но в журнале ошибок есть это -

2018/10/18 13:33:52 [ошибка] 10718 # 0: * 19 open () "/ usr / share / nginx / html / app / kibana" не удалось (2: нет такого файла или каталога), клиент: 127.0 .0.1, сервер: _, запрос: "GET / app / kibana HTTP / 1.1", хост: "127.0.0.1", реферер: "http://127.0.0.1/kibana_proxy/?username=my.user&password=test67"

Это мой файл конфигурации nginx -

server {
    listen *:80;
    server_name _;

    location = /auth {
        set $query '';
        if ($request_uri ~* "[^\?]+\?(.*)$") {
            set $query $1;
        }
        proxy_pass http://127.0.0.1:8080/auth?$query;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
    }

    location /kibana_proxy/ {
        proxy_pass http://127.0.0.1:5601/;
        auth_request /auth;
    }

    error_page 404 /404.html;
    location = /40x.html {

    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {

    }
}

person Mahesh H Viraktamath    schedule 18.10.2018    source источник


Ответы (2)


Всякий раз, когда вы используете Restricting Access with HTTP Basic Authentication, вы должны использовать следующий шаблон URL-адреса для доступа к ограниченному URL-адресу

http://username:[email protected]/

В стандартной HTTP-аутентификации невозможно передать имя пользователя и пароль через параметры запроса.

Обновление:

Я чувствую, что ваши настройки nginx нуждаются в обновлении. Вы должны переписать URL, чтобы удалить /kibana_proxy/:

location /kibana_proxy/
{
     rewrite ^/kibana_proxy/(.*) /$1 break;
     proxy_pass http://localhost:5200;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection 'upgrade';
     proxy_set_header Host $host;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_set_header  X-Real-IP  $remote_addr;
     proxy_cache_bypass $http_upgrade;
}
person argo    schedule 22.10.2018
comment
Но это не обычная аутентификация (я не использую поиск .htpasswd). Аутентификация выполняется во внешнем веб-приложении - http://127.0.0.1:8080/auth, и аутентификация работает, но proxy_pass для http://127.0.0.1:5601/ не работает. - person Mahesh H Viraktamath; 23.10.2018
comment
@MaheshHViraktamath Извините, я обновил ответ. Можете ли вы попробовать переписать URL-адрес, я чувствую, что настройки nginx вызывают проблему? - person argo; 23.10.2018
comment
Думаю, я попробовал это переписать, но сейчас попробовал снова. Я получил - 2018/10/23 14:22:30 [error] 26509#0: *5 open() "/usr/share/nginx/html/app/kibana" failed (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET /app/kibana HTTP/1.1", host: "localhost", referrer: "http://localhost/kibana_proxy/?username=abcd&password=123456" - person Mahesh H Viraktamath; 23.10.2018

Для тех, кто ищет ответ - вот конфиг сервера nginx, который решил проблему для меня -

server {
  listen *:80;
  server_name 127.0.0.1;

  location = /auth {
      set $query '';
      if ($request_uri ~* "[^\?]+\?(.*)$") {
         set $query $1;
      }
      # add_header X-debug-message "Parameters being passed $is_args$args" always;
      proxy_pass http://127.0.0.1:8080/auth?$query;
  }

  location /kibana/ {
     rewrite ^/kibana/(.*) /$1 break;
     proxy_pass http://127.0.0.1:5601;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection 'upgrade';
     proxy_set_header Host $host;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_set_header  X-Real-IP  $remote_addr;
     proxy_cache_bypass $http_upgrade;
     auth_request /auth;
  }

  location ~ (/app/|/app/kibana|/bundles/|/kibana4|/status|/plugins|/ui/|/api/|/monitoring/|/elasticsearch/) {
     proxy_pass http://127.0.0.1:5601;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade";
     proxy_set_header Host $host;
     rewrite /kibana4/(.*)$ /$1 break;
  }

  error_page 404 /404.html;
    location = /40x.html {
  }

  error_page 500 502 503 504 /50x.html;
    location = /50x.html {
  }
}
person Mahesh H Viraktamath    schedule 29.10.2018