具有不同代理 url 的相同位置 nginx
Same location with different proxy urls nginx
我们正在尝试通过 nginx 反向代理获取 nexus 作为 docker 图像的私有注册表。我们能够执行所有操作,例如拉取、搜索和标记,但无法推送到 nexus 注册表。
下面是location块下的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(linux\x5C))"
当我们尝试使用代理 _pass url 作为 http://box.company.net:4444 时,我们能够推送但无法拉取图像。
nginx 中是否可以在同一位置下针对不同的请求方法传递两个不同的 proxy_pass url。任何帮助都会非常好..谢谢
您可以对 select 后端端口使用 if or map 指令。
请注意,If is Evil,当然不是你的情况。
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;
}
@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;
}
我们正在尝试通过 nginx 反向代理获取 nexus 作为 docker 图像的私有注册表。我们能够执行所有操作,例如拉取、搜索和标记,但无法推送到 nexus 注册表。
下面是location块下的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(linux\x5C))"
当我们尝试使用代理 _pass url 作为 http://box.company.net:4444 时,我们能够推送但无法拉取图像。
nginx 中是否可以在同一位置下针对不同的请求方法传递两个不同的 proxy_pass url。任何帮助都会非常好..谢谢
您可以对 select 后端端口使用 if or map 指令。
请注意,If is Evil,当然不是你的情况。
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;
}
@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;
}