Запросы к частному реестру Docker за nginx обрабатываются HTTPS vhost - PullRequest
0 голосов
/ 31 октября 2018

У меня есть контейнер приватного реестра Docker, работающий за Nginx в HTTP.

Все работает нормально, пока я не добавлю конфигурацию сервера HTTPS. docker pull и docker push запросы обрабатываются этим узлом HTTPS, а не узлом реестра Docker (журналы доступа распечатываются в домене HTTPS, домен реестра Docker не получает ничего).

Итак, очевидно, я получил 404 ошибки.

Удаление этой конфигурации HTTPS заставляет ее работать снова.

Это мой реестр реестра док под /etc/nginx/sites-enabled:

server {
    listen 80;
    server_name docker-registry.my-domain.com;
    access_log /data/log/nginx/$server_name.access.log;
    client_max_body_size 0;

    location ~ \.*$ {
        proxy_pass http://localhost:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $http_x_forwarded_for;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass_request_headers on;
    }
}

И HTTPS vhost под /etc/nginx/sites-enabled:

server {
    listen 443 ssl;
    server_name foobar.my-domain.com;
    ssl_certificate /etc/nginx/certs/foobar.my-domain.com/crt;
    ssl_certificate_key /etc/nginx/certs/foobar.my-domain.com/key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;
    access_log /data/log/nginx/$server_name.access.log;

    location ~ \.*$ {
        proxy_pass http://localhost:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $http_x_forwarded_for;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass_request_headers on;
    }
}

server {
    listen 80;
    server_name foobar.my-domain.com;
    return 301 https://$server_name$request_uri;
}

Когда я использую <my-ip>:5000 в качестве insecure-registries, а не в качестве имени домена реестра Docker, все работает также нормально.

Когда я использую curl для отправки запроса http://docker-registry.my-domain.com/v2/<my-image>/manifests/latest, журнал доступа распечатки реестра Docker 401 Unauthorized, как и ожидалось.

Неправильно ли я настроил Nginx?

Версия докера:

Client: Docker Engine - Community
 Version:           18.09.0-ce-beta1
 API version:       1.39
 Go version:        go1.10.4
 Git commit:        78a6bdb
 Built:             Thu Sep  6 22:41:53 2018
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.0-ce-beta1
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       78a6bdb
  Built:            Thu Sep  6 22:49:35 2018
  OS/Arch:          linux/amd64
  Experimental:     true

Большое спасибо!

--------------- Обновления ---------------------------

Я считаю, что он работает нормально, если я удаляю протокол ssl после прослушивания в конфигурации HTTPS.

1 Ответ

0 голосов
/ 01 ноября 2018

Наконец-то я обнаружил, что если ssl также включено в docker-registry.my-domain.com, все работает нормально. Я не знаю почему, но это действительно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...