Nexus показывает, что "путь к репозиторию должен иметь еще один" / "после начального" / "при загрузке с помощью cURL
Я запускаю свой Nexus OSS 3.14.0-04 за обратным прокси-сервером nginx, который выполняет аутентификацию с помощью nginx. С помощью сервера nginx мы выполняем аутентификацию через OpenID Connect, как описано здесь, что работает как шарм. Теперь мы хотим получить доступ к Nexus через Jenkins и / или curl без аутентификации OpenID Connect. Для этого я реализовал в конфигурации nginx следующий код:
server {
resolver 127.0.0.11;
listen 8443 ssl;
server_name nexus.my.domain;
ssl_certificate /home/appuser/data/certificates/cer.pem;
ssl_certificate_key /home/appuser/data/certificates/key.pem;
access_log /home/appuser/data/nginx/log/access_nexus.log;
error_log /home/appuser/data/nginx/log/error_nexus.log;
error_page 500 502 503 504 /50x.html;
#Allow large uploads of files
client_max_body_size 4G;
# optimize downloading files larger than 1G
#proxy_max_temp_file_size 5G;
set $session_secret abcdefghijklmnopqrstuvwxyz;
location / {
set $oidc_redirect_logout_url "false";
access_by_lua_file /home/appuser/data/nginx/conf.d/oidc_nexus.lua;
set $target_server nexus-internal.my.domain;
proxy_pass https://$target_server:8443;
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-Proto "https";
proxy_set_header X-Forwarded-Host $server_name;
}
location /repository {
proxy_pass https://nexus-internal.my.domain:8443;
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-Proto $scheme;
proxy_set_header X-Forwarded-Host $server_name;
}
}
Я отключил анонимную аутентификацию в нексусе и создал внутреннего пользователя нексуса "prj.nxs.myproject". Этот пользователь имеет роль "Администраторы MYPROJECT". Роль связана с привилегиями "просмотр репозитория" для каждого репозитория, относящегося к проекту (привилегии включают разрешения "просмотр, чтение, добавление, удаление").
Когда я подключаюсь к Nexus через браузер, это аутентификация через OIDC. Когда я просматриваю репозиторий maven и пытаюсь загрузить что-нибудь из него (например, https://nexus.my.domain/repository/MYPROJECT-maven-group/com/myproject/cip/myproject-cip/main/2.0.3/main-2.0.3.pom) в браузере браузер запрашивает аутентификацию. Я ввел учетные данные, и загрузка прошла успешно.
Теперь я пытаюсь повторить это из командной строки с помощью curl. Я сделал следующее:
curl -u prj.nxs.myproject:abcd1234 https://nexus.my.domain/repository/MYPROJECT-maven-group/com/myproject/cip/myproject-cip/main/2.0.3/main-2.0.3.pom
С помощью этой команды я получаю следующий ответ:
<html>
...
...
<body>
<div class="nexus-body">
...
...
</div>
<div class="content-body">
<div class="content-section">
Repository path must have another '/' after initial '/'
</div>
</div>
</div>
</body>
</html>
Когда я пытаюсь подключиться к серверу nexus напрямую с внутренним именем (и избегаю использования nginx),
curl -u prj.nxs.myproject:abcd1234 https://nexus-internal.my.domain/repository/MYPROJECT-maven-group/com/myproject/cip/myproject-cip/main/2.0.3/main-2.0.3.pom
я могу скачать файл. Похоже, это как-то связано с конфигурацией nginx. Я также попытался добавить конечное окончание '/' к proxy_pass в расположении '/repository' (это описано в документации nexus, а также здесь), но это также не увенчалось успехом и ничего не меняет.
Есть ли у кого-нибудь идея, что я могу сделать, чтобы выполнить базовую аутентификацию с помощью curl для загрузки контента из nexus?
С уважением
Дэйв