大部分人拿来当作docker私有仓库的机器可能不止运行Harbor一个程序,因此很有可能80和443端口会被自己安装的Http程序所占用。而如果修改了Harbor的端口的话长长的镜像名字还得带上端口,看起来有点难受。

所以在此情况可以安装Nginx作为端口转发的工具,由他来控制80和443端口的访问。

设置Harbor

因为接下来设置nginx之后可以通过域名来区分入口,不需要依靠端口。就需要把Harbor的hostname修改。

修改harbor.cfg

# 不需要加入端口
hostname = docker.domain.com

修改docker-compose.yml

#修改proxy节点的port
    - 8848:80
    - 9443:443

接下来重新运行./install.shHarbor不会删除任何数据

完成之后访问docker.domain.com:9443测试能否打开,如果一切正常进行接下来的操作

配置Nginx反向代理

创建新的配置文件,以下是不完全配置,根据自己需要修改内容

server
{
    listen 80;
	listen 443 ssl http2;
    server_name docker.domain.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /webdir;
    #ssl证书位置
    ssl_certificate    /etc/letsencrypt/live/docker.domain.com/fullchain.pem;
    ssl_certificate_key    /etc/letsencrypt/live/docker.domain.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    error_page 497  https://$host$request_uri;

    location / 
    {
        #目标地址,建议使用localhost
        proxy_pass https://localhost:9443;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
            
        add_header X-Cache $upstream_cache_status;
        
        expires 12h;
    }

}

重载nginx之后就可以通过docker.domain.com直接访问Harbor,也能使用docker直接login。

在Nginx的目标地址如果使用Localhost的话可以在防火墙中关闭9443的对外连接,可以减小安全风险