同一位置的NGINX位置指令

同一位置的NGINX位置指令,nginx,nexus,nginx-location,Nginx,Nexus,Nginx Location,我有一个Nexus Repository Manager OSS 3.0作为私有docker注册表在NGINX后面运行。我的Docker客户端(不是正式的Docker客户端)希望从/v2/返回200OK和空JSON字符串{}。我遇到的问题是,Nexus返回的200OK是一个空字符串 我的解决办法是让NGINX为/v2/请求和代理/v2/*请求返回一个包含空JSON字符串的文件到Nexus server { listen 443 ssl; server_name

我有一个Nexus Repository Manager OSS 3.0作为私有docker注册表在NGINX后面运行。我的Docker客户端(不是正式的Docker客户端)希望从
/v2/
返回
200OK
和空JSON字符串
{}
。我遇到的问题是,Nexus返回的
200OK
是一个空字符串

我的解决办法是让NGINX为
/v2/
请求和代理
/v2/*
请求返回一个包含空JSON字符串的文件到Nexus

server {
  listen               443 ssl;
  server_name          nexus.example.com;
  ssl_certificate      ssl/server.crt;
  ssl_certificate_key  ssl/server.key;

  location = /v2/ {
    root /home/ubuntu/www;
    index empty.json;
  }

  location /v2/ {
    proxy_pass                          http://localhost:5000;
    proxy_set_header  Host              $http_host;   # required for docker client's sake
    proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
    proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;
    proxy_read_timeout                  900;
  }
}

我希望这能起作用,但它将所有通信量(
/v2/,/v2/\u目录,/v2/myimage/manifests/latest
,等等)定向到代理传递。我如何才能使
/v2/
请求到达断开
empty.json
文件的位置?

因此您已经在
/home/ubuntu/www/v2/empty.json
上放置了一个文件

问题是
index
指令将URI重写为
/v2/empty.json
,然后由
位置/v2/
块处理

一种解决方案是创建另一个位置以匹配重写的URI,并将其作为静态文件:

root /home/ubuntu/www;

location = /v2/ {
    index empty.json;
}
location = /v2/empty.json {
}
另一种解决方案是使用
error\u页面
指令。但是您仍然需要指定
位置
根目录
来处理静态文件:


谢谢你,这很有道理!我同意你提出的第一个解决方案,效果很好。
location = /v2/ {
    return 405;
    error_page 405 =200 /static/empty.json;
}
location / {
    root /home/ubuntu/www;
}