解析 HTTP 404 响应正文的反向代理错误背后的 Gitlab 注册表:JSON 输入的意外结束:“”

Posted

技术标签:

【中文标题】解析 HTTP 404 响应正文的反向代理错误背后的 Gitlab 注册表:JSON 输入的意外结束:“”【英文标题】:Gitlab registry behind reverse proxy error parsing HTTP 404 response body: unexpected end of JSON input: "" 【发布时间】:2021-05-28 14:50:24 【问题描述】:

我正在尝试在 nginx 反向代理(win10)后面设置一个家庭 GitLab + GitLab 容器注册表(VM ubuntu 综合安装): 我从这里获取了 Nginx 配置:https://gitlab.com/gitlab-org/gitlab-recipes/-/tree/master/web-server/nginx

server 
  listen 443 ssl;
  listen 5050 ssl;
  #listen [::]:443 ipv6only=on ssl;
  server_name my-gitlab.org; ## Replace this with something like gitlab.example.com
  server_tokens off; ## Don't show the nginx version number, a security best practice
  root /opt/gitlab/embedded/service/gitlab-rails/public;

  ssl_certificate /nginx-1.18.0/my-gitlab.crt;
  ssl_certificate_key /nginx-1.18.0/my-gitlab.key;

  ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 5m;

  location / 
    client_max_body_size 0;
    gzip off;
    
    proxy_cache off;

    proxy_read_timeout      300;
    proxy_connect_timeout   300;
    proxy_redirect          off;

    proxy_http_version 1.1;

    proxy_set_header    Host                $http_host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-Ssl     on;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   $scheme;
    proxy_pass https://my-gitlab-IP;
  

在 433 上打开 GitLab 可以在 5050 上登录 Docker,但是当我尝试从容器注册表推送或拉取时: 来自守护程序的错误响应:解析 HTTP 404 响应正文时出错:JSON 输入意外结束:“”

尝试了许多更改 GitLab.rb 文件的建议,但是如果没有 Nginx-revseproxing 它就无法工作 Docker 推/拉工作,所以我很确定这是我的 Nginx 配置中缺少的东西,但不确定是什么.

谁能帮忙?

【问题讨论】:

【参考方案1】:

看来我需要一个单独的服务器块用于注册表

server 
    
        listen 5005 ssl;    
        server_name  my-ip:5005;
        ssl_certificate      /nginx-1.18.0/my-ip.crt;
        ssl_certificate_key  /nginx-1.18.0/my-ip.key;
        location / 
        
                client_max_body_size 0;
                proxy_pass          https://my-ip:5005;
        
    

恢复为默认 GitLab 注册表端口

【讨论】:

以上是关于解析 HTTP 404 响应正文的反向代理错误背后的 Gitlab 注册表:JSON 输入的意外结束:“”的主要内容,如果未能解决你的问题,请参考以下文章

nginx 反向代理 google,出现 404,怎么破

在反向代理的背后,Spring Security登录重定向到错误的端口

csharp WebApi ActionFilter与Service Fabric反向代理或ServiceFabric.AutoRest结合使用,以指示RESTfull 404响应。

内网穿透的高性能的反向代理应用FRP-自定义404错误页实践可行版

反向代理背后的 SOP 问题

nginx反向代理后,只要刷新页面无法访问,404错误,解决方法