Нексус sonatype за прокси-сервером nginx возвращает 401 неавторизованный

У меня запущен док-контейнер Sonatype Nexus, и вместе с ним я использую nginx в качестве обратного прокси. После того, как все настроили и пытаемся подключиться с помощью команды docker login. Я получаю 401 в моем журнале

docker login -u test -p test123 https://nexux.mydomain.net:28080

Вывод из консоли

Get "https://nexus.mydomain.net:28080/v2/": error parsing HTTP 404 response body: invalid character '<' looking for beginning of value: "\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <title>404 - Nexus Repository Manager</title>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n\n\n  <!--[if lt IE 9]>\n  <script>(new Image).src=\"../favicon.ico?3.38.1-01\"</script>\n  <![endif]-->\n  <link rel=\"icon\" type=\"image/png\" href=\"../favicon-32x32.png?3.38.1-01\" sizes=\"32x32\">\n  <link rel=\"mask-icon\" href=\"../safari-pinned-tab.svg?3.38.1-01\" color=\"#5bbad5\">\n  <link rel=\"icon\" type=\"image/png\" href=\"../favicon-16x16.png?3.38.1-01\" sizes=\"16x16\">\n  <link rel=\"shortcut icon\" href=\"../favicon.ico?3.38.1-01\">\n  <meta name=\"msapplication-TileImage\" content=\"../mstile-144x144.png?3.38.1-01\">\n  <meta name=\"msapplication-TileColor\" content=\"#00a300\">\n\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"../static/css/nexus-content.css?3.38.1-01\"/>\n</head>\n<body>\n<div class=\"nexus-header\">\n  <a href=\"..\">\n    <div class=\"product-logo\">\n      <img src=\"../static/rapture/resources/icons/x32/nexus-white.png?3.38.1-01\" alt=\"Product logo\"/>\n    </div>\n    <div class=\"product-id\">\n      <div class=\"product-id__line-1\">\n        <span class=\"product-name\">Nexus Repository Manager</span>\n      </div>\n      <div class=\"product-id__line-2\">\n        <span class=\"product-spec\">OSS 3.38.1-01</span>\n      </div>\n    </div>\n  </a>\n</div>\n\n<div class=\"nexus-body\">\n  <div class=\"content-header\">\n    <img src=\"../static/rapture/resources/icons/x32/exclamation.png?3.38.1-01\" alt=\"Exclamation point\" aria-role=\"presentation\"/>\n    <span class=\"title\">Error 404</span>\n    <span class=\"description\">Not Found</span>\n  </div>\n  <div class=\"content-body\">\n    <div class=\"content-section\">\n      Not Found\n    </div>\n  </div>\n</div>\n</body>\n</html>\n\n"

вывод лога из nginx

192.168.10.200 - - [05/Apr/2022:09:09:15 +0000] "GET /v2/ HTTP/1.1" 401 113 "-" "Docker-Client/20.10.14 (linux)"
192.168.10.200 - test [05/Apr/2022:09:09:15 +0000] "GET /v2/token?account=test&client_id=docker&offline_token=true&service=https%3A%2F%2Fnexus.mydomain.net%2Fv2%2Ftoken HTTP/1.1" 404 730 "-" "Docker-Client/20.10.14 (linux)"

Конфигурация виртуального хоста nginx

server {                                                                         
    listen 443 ssl;                     
    server_name nexus.mydomain.net;                                             
                                        
    ssl_certificate /etc/nginx/certs/nexus.crt; 
    ssl_certificate_key /etc/nginx/certs/nexus.key;                              
                                                                                 
    # allow large uploads of files                                               
    client_max_body_size 1G;                                                     
                                        
    location / {                                                                 
        # Internal host name/FQDN                                                
        proxy_pass http://10.0.0.4:8081; 

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 28080 ssl;
    server_name nexus.mydomain.net;

    ssl_certificate /etc/nginx/certs/nexus.crt; 
    ssl_certificate_key /etc/nginx/certs/nexus.key;

    # allow large uploads of files
    client_max_body_size 1G;

    location / {
        # Internal host name/FQDN
        proxy_pass http://10.0.0.4:18080;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

У меня включена область Docker Bearer Token и область RUT.

Что еще мне здесь не хватает?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
18
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно установить порт в заголовке хоста, чтобы ответ, отправленный Nexus, включал его:

proxy_set_header Host $host:$server_port

Я также предлагаю пересылать напрямую в репозиторий, нет необходимости использовать порт коннектора в репозитории докеров.

    proxy_pass http://10.0.0.4:8081/repository/docker-repo-name;

Создание портов коннектора значительно увеличивает нагрузку на экземпляр, и в данном случае в этом нет необходимости.

как мне вытащить и нажать изображение в этом случае?

Mox 07.04.2022 05:53
Ответ принят как подходящий

Все, что вам нужно сделать, это использовать конфигурацию ниже

http {

  proxy_send_timeout 120;
  proxy_read_timeout 300;
  proxy_buffering    off;
  proxy_request_buffering off;
  keepalive_timeout  5 5;
  tcp_nodelay        on;

  server {
   listen 443 ssl;
   server_name project.example.com

   ssl on; 
   ssl_certificate /path/to/ssl/server.crt;
   ssl_certificate_key /path/to/ssl/server.key;

   # Docker /v2 and /v1 (for search) requests
   location /v2 {
     proxy_set_header Host $host:$server_port;
     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_pass http://nexus.example.com:8081/repository/docker-repo/$request_uri;
   }
   location /v1 {
     proxy_set_header Host $host:$server_port;
     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_pass http://nexus.example.com:8081/repository/docker-repo/$request_uri;
  }

   # Regular Nexus requests
   location / {
     proxy_set_header Host $host:$server_port;
     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_pass http://nexus.example.com:8081;
   }
 }}

https://help.sonatype.com/repomanager3/nexus-repository-administration/formats/docker-registry/docker-repository-reverse-proxy-strategies

Другие вопросы по теме