仅针对推送请求使用基本身份验证保护docker注册表
我正在尝试在nginx代理后面设置一个私有docker注册表,该代理对每个人都是只读的(即允许拉请求),但对推请求需要身份验证。我遵循了各种各样的指南,但仍然感到困惑。以下是我当前的nginx配置:仅针对推送请求使用基本身份验证保护docker注册表,docker,authentication,nginx,registry,Docker,Authentication,Nginx,Registry,我正在尝试在nginx代理后面设置一个私有docker注册表,该代理对每个人都是只读的(即允许拉请求),但对推请求需要身份验证。我遵循了各种各样的指南,但仍然感到困惑。以下是我当前的nginx配置: events { worker_connections 1024; } http { upstream docker-registry { server registry:5000; } ## Set a variable to help us decide if we
events {
worker_connections 1024;
}
http {
upstream docker-registry {
server registry:5000;
}
## Set a variable to help us decide if we need to add the
## 'Docker-Distribution-Api-Version' header.
## The registry always sets this header.
## In the case of nginx performing auth, the header is unset
## since nginx is auth-ing before proxying.
map $upstream_http_docker_distribution_api_version $docker_distribution_api_version {
'registry/2.0' '';
default registry/2.0;
}
server {
listen 80;
server_name docker-host.example.com;
location / {
rewrite ^(.*)$ https://docker-host.example.com$1 last;
}
}
server {
listen 443 ssl;
server_name docker-host.example.com;
ssl_certificate /etc/nginx/ssl/example.cert.pem;
ssl_certificate_key /etc/nginx/ssl/example.key.pem;
ssl_ciphers 'AES256+EECDH:AES256+EDH::!EECDH+aRSA+RC4:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS';
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
client_max_body_size 0;
location / {
limit_except GET HEAD OPTIONS {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/users.pwd;
}
include proxy.conf;
}
}
}
它确实允许匿名拉取请求,但推送总是会失败,因为“未经授权:需要身份验证”。如果我删除了除之外的有条件的限制,\u,即要求对所有访问进行身份验证,那么它在登录后就可以正常工作
当我完全从nginx
中删除身份验证配置时,一切都可以正常工作,但显然没有身份验证
非常感谢您提供的任何帮助或指导。我们一直在使用它,它工作得非常好。您可以设置许多身份验证方法
有关更多信息,请查看
我们一直在使用它,它工作得很好。您可以设置许多身份验证方法
有关更多信息,请查看
“未经授权:需要身份验证”错误来自注册表API。这意味着您已经在注册表本身中启用了身份验证。禁用注册表中的身份验证并仅使用nginx基本身份验证,或者代理传递带有相关数据的“授权”标题(技巧)。注册表API中出现“未授权:需要身份验证”错误。这意味着您已经在注册表本身中启用了身份验证。禁用注册表中的身份验证并仅使用nginx基本身份验证,或者代理传递带有相关数据的“授权”标题(棘手)。如果需要一些示例,请告诉我。我花了一段时间才弄清楚,因为我想在traefik
之后运行注册表
(透明代理),但我确实成功地配置了docker\u auth
来做我想做的事情。非常感谢你的指点!很高兴听到这个消息,这是一个很好的项目。如果可以,请开始;-)祝您今天过得愉快!如果您需要一些示例,请告诉我。由于我想在traefik
(透明代理)后面运行registry
,我花了一段时间才弄清楚,但我确实成功地配置了docker\u auth
,以完成我想要的操作。非常感谢你的指点!很高兴听到这个消息,这是一个很好的项目。如果可以,请开始;-)祝您今天过得愉快!这是由注册表
或nginx
生成的未经授权的
错误吗?您是否在注册表
中禁用了身份验证?我编辑了该问题以澄清注册表
未设置任何身份验证。当我完全从nginx
config中删除身份验证配置时,它也可以工作。这似乎表明错误来自nginx
是由registry
或nginx
生成的unauthorized
错误?您是否在注册表
中禁用了身份验证?我编辑了该问题以澄清注册表
未设置任何身份验证。当我完全从nginx
config中删除身份验证配置时,它也可以工作。这似乎表明错误来自nginx
我编辑了原文以澄清可能不是这样。我编辑了原文以澄清可能不是这样。