Обратный прокси-сервер Nginx с использованием модуля auth_request и API внешней аутентификации - ошибка 404
Я пытаюсь настроить nginx в качестве обратного прокси-сервера для защиты другого сервера (кибана) с помощью внешнего 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 conf -
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 {
}
}
2 ответа
Всякий раз, когда вы используете Restricting Access with HTTP Basic Authentication
тогда вы должны использовать следующий шаблон URL для доступа к ограниченному URL
http://username:password@example.com/
Невозможно передать имя пользователя и пароль через параметры запроса в стандартной 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;
}
Для тех, кто ищет ответ - вот конф сервера 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 {
}
}