У меня есть контейнер приватного реестра 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.