此前,通过《Harbor 的安装和使用》,以 Nginx 转发到 Harbor 的方式进行安装,随后的使用碰到一些问题。(使用标准方式安装则不会碰到本文提及的问题 🙂)

1. docker push - 持续 retry 无进度

抓包结果

原因分析: docker push 初始化后,会使用 80 端口(HTTP)进行上传,此前 Nginx 配置了全站强制 HTTPS

1
2
3
4
5
6
7
8
9
# 重定向所有 HTTP 请求
server {
listen 80;
server_name _;

location / {
rewrite ^/(.*)$ https://$server_name/$1 permanent;
}
}

解决方案: Nginx 配置添加对 hub.fqk.app 80 端口的转发

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80;
server_name hub.fqk.app;

location / {
proxy_read_timeout 300;
proxy_pass http://127.0.0.1:9080;
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}

2. docker push - unauthorized: authentication required

相关 Issue: Registry with auth: auth issue at push #1177

解决方案:

1
2
# 编辑 Harbor Nginx 配置
sudo vi ./common/config/nginx/nginx.conf

找到 location /v2/ 的配置块 ,将

proxy_set_header X-Forwarded-Proto $scheme;

调整为

proxy_set_header X-Forwarded-Proto https;

而后重启 Harbor Nginx docker restart nginx

3. docker push - 413 Request Entity Too Large”

此为用于转发的 Nginx 上传文件大小超限的问题,调整 client_max_body_size 配置值即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
server_name hub.fqk.app;
client_max_body_size 100m;

location / {
proxy_read_timeout 300;
proxy_pass http://127.0.0.1:9080;
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}