相同位置的 NGINX 位置指令
NGINX location directives for the same location
我在 NGINX 后面有一个 Nexus Repository Manager OSS 3.0 运行 作为私有 docker 注册表。我的 Docker 客户(不是官方的 docker 客户)期望从 200 OK
和一个空的 JSON 字符串 {}
returned =13=]。我 运行 遇到的问题是 Nexus return 是 200 OK
而是一个空字符串。
我的解决方法是让 NGINX return 一个包含空 JSON 字符串的文件,用于 /v2/
请求和代理 /v2/*
对 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/_catalog, /v2/myimage/manifests/latest
等)定向到 proxy_pass。我怎样才能使 /v2/
请求转到切断 empty.json
文件的位置?
所以您在 /home/ubuntu/www/v2/empty.json
放置了一个文件?
问题是 index
指令会将 URI 重写为 /v2/empty.json
,然后由 location /v2/
块处理。
一个解决方案是创建另一个位置来匹配重写的 URI 并将其作为静态文件提供:
root /home/ubuntu/www;
location = /v2/ {
index empty.json;
}
location = /v2/empty.json {
}
另一个解决方案是使用 error_page
指令。但是您仍然需要指定 location
和 root
来处理静态文件:
location = /v2/ {
return 405;
error_page 405 =200 /static/empty.json;
}
location / {
root /home/ubuntu/www;
}
我在 NGINX 后面有一个 Nexus Repository Manager OSS 3.0 运行 作为私有 docker 注册表。我的 Docker 客户(不是官方的 docker 客户)期望从 200 OK
和一个空的 JSON 字符串 {}
returned =13=]。我 运行 遇到的问题是 Nexus return 是 200 OK
而是一个空字符串。
我的解决方法是让 NGINX return 一个包含空 JSON 字符串的文件,用于 /v2/
请求和代理 /v2/*
对 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/_catalog, /v2/myimage/manifests/latest
等)定向到 proxy_pass。我怎样才能使 /v2/
请求转到切断 empty.json
文件的位置?
所以您在 /home/ubuntu/www/v2/empty.json
放置了一个文件?
问题是 index
指令会将 URI 重写为 /v2/empty.json
,然后由 location /v2/
块处理。
一个解决方案是创建另一个位置来匹配重写的 URI 并将其作为静态文件提供:
root /home/ubuntu/www;
location = /v2/ {
index empty.json;
}
location = /v2/empty.json {
}
另一个解决方案是使用 error_page
指令。但是您仍然需要指定 location
和 root
来处理静态文件:
location = /v2/ {
return 405;
error_page 405 =200 /static/empty.json;
}
location / {
root /home/ubuntu/www;
}