Я получаю сообщение об ошибке Authentication required
после того, как я войду в систему Wildfly 13 Management Console
.
Если я введу неверный пароль или пользователя, он снова запросит, но если я введу правильно, он отобразит страницу ссообщение об ошибке (поэтому я предполагаю, что пользователь и пароль верны, но что-то еще после этого выдает ошибку).
![enter image description here](https://i.stack.imgur.com/Df8cq.png)
Я использую докердля запуска контейнера nginx и контейнера wildfly.
nginx прослушивает внешний порт 9991
и прокси передает запрос контейнеру wildfly, но показывает ошибку, описанную ранее.
Это просто происходит с консолью Wildfly , каждый второй запрос проксируется, даже если запрос проксирован к веб-сокету или Wildfly через порт 8080
, успешно выполняется .
.Контейнер Wildfly слушает внешне через порт 9990
и Я могу успешно получить доступ к консоли через этот порт .Если в докере я сопоставлю порт "9992:9990"
, я все равно смогу успешно получить доступ к консоли через порт 9992
.
Итак, похоже, что это не связано с докером, а сСама консоль Wildfly.Вероятно, какая-то аутентификация, которая не проходит успешно при использовании обратного прокси в середине.
У меня есть демонстрационный проект Docker на https://github.com/lucasbasquerotto/docker-main,, и вы можете загрузить тег 0.0.6, который имеет всенастроить для работы с Wildfly 13 и nginx и смоделировать эту ошибку.
git clone -b 0.0.6 --single-branch --depth 1 https://github.com/lucasbasquerotto/docker-main.git
cd docker-main
docker-compose up -d
Затем, если вы обращаетесь к контейнеру напрямую в http://localhost:9990
с пользователем monitor
и паролем Monitor#70365
всеработает .
Но если вы получаете доступ к http://localhost:9991
с теми же учетными данными, через обратный прокси-сервер nginx, вы получаете ошибку .
My nginx.conf
file:
upstream docker-wildfly {
server wildfly:9990;
}
location / {
proxy_pass http://docker-wildfly;
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 X-Forwarded-Host $server_name;
}
Я также пытался с:
proxy_set_header X-Forwarded-Proto $scheme;
А также с Заголовок авторизации (только 2-я строка и также с обоими):
proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;
А также определение заголовка хоста с портом (вместо просто $ host):
proxy_set_header Host $server_addr:$server_port;
Я пробовал вышеуказанные конфигурации изолированно иобъединены вместеВсе безрезультатно.
Любые предложения?
Кто-нибудь успешно получал доступ к консоли Wildfly через обратный прокси-сервер?
Обновление (2018-09-22)
Кажется, что Wildfly использует дайджест-аутентификацию (вместо базовой).
Я вижу заголовок в консоли, как показано ниже:
Authorization: Digest username="monitor", realm="ManagementRealm", nonce="AAAAAQAAAStPzpEGR3LxjJcd+HqIX2eJ+W8JuzRHejXPcGH++43AGWSVYTA=", uri="/console/index.html", algorithm=MD5, response="8d5b2b26adce452555d13598e77c0f63", opaque="00000000000000000000000000000000", qop=auth, nc=00000005, cnonce="fe0e31dd57f83948"
Не знаюя не вижу много документации об использовании nginx для передачи запросов прокси с заголовками дайджеста (но я думаю, что это должно быть прозрачно).
Один вопрос, который я видел здесь в SO, это https://serverfault.com/questions/750213/http-digest-authentication-on-proxied-server,, но ответа нетдалеко.
Я видел, что есть неофициальный модуль nginx https://www.nginx.com/resources/wiki/modules/auth_digest/,, но в репозитории github (https://github.com/atomx/nginx-http-auth-digest) он говорит:
Модуль ngx_http_auth_digest дополняет встроенный модуль базовой аутентификации Nginx, предоставляя поддержку дайджест-аутентификации RFC 2617. Модуль в настоящее время функционирует, но только проверен и проверен его автором. И учитывая, что это код безопасности, один набор глаз являетсяПочти наверняка недостаточно, чтобы гарантировать, что это на 100% правильно.Пока не появятся несколько сообщений об ошибках и не исчезнут некоторые «неизвестные неизвестные» в коде, считайте этот модуль «альфой» и относитесь к нему с должной степенью скептицизма.
Такжемне не кажется правильным закодировать пользователя и передать файл для использования nginx (в этом случае аутентификация должна быть прозрачной для обратного прокси-сервера).
В любом случае, я пробовал это ион корректно запрашивает у меня аутентификацию, даже если конечный пункт назначения не имеет дайджест-аутентификации, как, например, при попытке подключиться к сайту wildfly (не консоли), он запрашивает при попытке подключиться к nginx (перед проксированием запроса), затем онуспешно перенаправляет к месту назначения, за исключением случая с консолью wildfly, он постоянно просит меня пройти аутентификацию.
ИтакЯ думаю, что это не решение.Кажется, проблема в том, что nginx передает консоли Wildfly.