具有不同代理网址的相同位置nginx



我们正试图通过nginx反向代理获取nexus,作为docker镜像的私有注册表。我们能够执行所有操作,例如拉取,搜索和标记,但无法推送到nexus注册表。

下面是位置块下的nginx配置。

    location ~ ^/(v1|v2)/
    {
            proxy_set_header        Host $http_host;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        X-Forwarded-Proto "https";
            proxy_pass              http://box.company.net:5555;
            proxy_read_timeout      90;
    }

我们能够搜索和提取图像。

但是通过推动,我们面临以下错误。

x.x.x.x - admin [23/Jun/2017:14:32:34 +0800] "POST /v2/fedora/apache/blobs/uploads/?from=fedora%2Fssh&mount=sha256%3Aacd6cf67daf4cd1fcff55ece5a906a45e1569b81271b80136a1f5fecfa4546ed HTTP/1.1" 404 717 "-" "docker/1.12.6 go/go1.7.4 kernel/3.10.0-514.10.2.el7.x86_64 os/linux arch/amd64 UpstreamClient(Docker-Client/1.12.6 x5C(linuxx5C))"

当我们尝试使用代理_pass URL作为 http://box.company.net:4444 时,我们能够 推送但无法拉取图像 。

是否可以在nginx中在同一位置下传递两个不同的proxy_pass网址,但请求方法不同。任何帮助都会很棒..谢谢

@sempasha : 谢谢你的帮助。它对我有用,只是做了一个小的调整.下面是为使其正常工作而添加的位置块。

  location / {
      proxy_set_header        Host $http_host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        if ($request_method !~* GET) {
                proxy_pass              http://box.company.net:4444;
        }
        if ($request_method = GET) {
                proxy_pass              http://box.company.net:5555;
        }
      proxy_read_timeout      90;
    }

可以使用 if 或 map 指令来选择后端端口。

请注意,如果邪恶,当然不是你的情况。

location ~ ^/(v1|v2)/
{
    set $port 5555;
    if ($request_method = POST) {
        set $port 4444;
    }
    proxy_set_header        Host $http_host;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto "https";
    proxy_pass              http://box.company.net:$port;
    proxy_read_timeout      90;
}

最新更新