问题描述
我搭建了一个docker私有仓库,1、系统是centos62、通过nginx代理,并增加了用户名和密码认证,还有ssl加密传输3、docker仓库registry是安装在192.168.0.40上,并且nginx也是安装在这台主机上nginx配置如下:server{listen443;server_nameregistry.info.cn;sslon;ssl_certificateinfo.cn.crt;ssl_certificate_keyinfo.cn.key;access_loglogs/host.access.logmain;location/{auth_basic"SecurityZones";auth_basic_user_file/usr/local/nginx/password;proxy_passhttp://192.168.0.40:5000;}error_page500502503504/50x.html;location=/50x.html{roothtml;}}其中ca证书是花钱购买的,能正常使用。在docker客户端通过curl-XGEThttps://test:test@registry.info.cn/v1/search能正确返回dockerloginhttps://registry.info.cn可以正常登录,能返回success但是我push一个images到registry的时候就报错[root@localhost/]#dockerpushregistry.info.cn/centos7Thepushreferstoarepository[registry.info.cn/centos7](len:1)SendingimagelistPushingrepositoryregistry.info.cn/centos7(1tags)47d44cb6f252:PushingFailedtouploadmetadata:Puthttps://192.168.0.40:5000/v1/ima...8f92557f4d05a/json:EOF我这里好奇的是,push的时候怎么又会解析出IP来访问了,https://192.168.0.40:5000这个肯定是会出错的,不知道原因?????
解决方案
解决方案二:
问题已解决,是nginx的配置问题,默认反向代理服务器会向后端真实服务器发送请求,并且请求头中的host字段应为proxy_pass指令设置的服务器。所以只要在nginx的location里增加如下配置即可,作用是不修改web请求header中的host字段。proxy_set_headerHost$http_host;