Add nginx configuration for v1 and v2 registry
Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
This commit is contained in:
parent
5dd885b311
commit
6f087829c9
1 changed files with 58 additions and 0 deletions
|
@ -406,3 +406,61 @@ middleware:
|
||||||
**TODO(stevvooe): Need a "best practice" configuration overview. Perhaps, we can point to a documentation section.
|
**TODO(stevvooe): Need a "best practice" configuration overview. Perhaps, we can point to a documentation section.
|
||||||
|
|
||||||
|
|
||||||
|
# Configure nginx to deploy alongside v1 registry
|
||||||
|
|
||||||
|
This sections describes how to configure nginx to proxy to both a v1 and v2
|
||||||
|
registry. Nginx will handle routing of to the correct registry based on the
|
||||||
|
URL and Docker client version.
|
||||||
|
|
||||||
|
## Example configuration
|
||||||
|
With v1 registry running at `localhost:5001` and v2 registry running at
|
||||||
|
`localhost:5002`. Add this to `/etc/nginx/conf.d/registry.conf`.
|
||||||
|
```
|
||||||
|
server {
|
||||||
|
listen 5000;
|
||||||
|
server_name localhost;
|
||||||
|
|
||||||
|
ssl on;
|
||||||
|
ssl_certificate /etc/docker/registry/certs/domain.crt;
|
||||||
|
ssl_certificate_key /etc/docker/registry/certs/domain.key;
|
||||||
|
|
||||||
|
client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads
|
||||||
|
|
||||||
|
# required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
|
||||||
|
chunked_transfer_encoding on;
|
||||||
|
|
||||||
|
location /v2/ {
|
||||||
|
# Do not allow connections from docker 1.5 and earlier
|
||||||
|
# docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
|
||||||
|
if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxy_pass http://localhost:5002;
|
||||||
|
proxy_set_header Host $http_host; # required for docker client's sake
|
||||||
|
proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP
|
||||||
|
proxy_read_timeout 900;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://localhost:5001;
|
||||||
|
proxy_set_header Host $http_host; # required for docker client's sake
|
||||||
|
proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP
|
||||||
|
proxy_set_header Authorization ""; # see https://github.com/docker/docker-registry/issues/170
|
||||||
|
proxy_read_timeout 900;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Running nginx without a v1 registry
|
||||||
|
When running a v2 registry behind nginx without a v1 registry, the `/v1/` endpoint should
|
||||||
|
be explicitly configured to return a 404 if only the `/v2/` route is proxied. This
|
||||||
|
is needed due to the v1 registry fallback logic within Docker 1.5 and 1.6 which will attempt
|
||||||
|
to retrieve content from the v1 endpoint if no content was retrieved from v2.
|
||||||
|
|
||||||
|
Add this location block to explicitly block v1 requests.
|
||||||
|
```
|
||||||
|
localhost /v1/ {
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
Loading…
Reference in a new issue