2016-08-12 2 views
1

У меня есть диспетчер репозитория Nexus OSS 3.0, работающий позади NGINX как приватный реестр докеров. Мой клиент Docker (а не официальный клиент-докер) ожидает 200 OK и пустую строку JSON {} для возврата от /v2/. Проблема, с которой я сталкиваюсь, заключается в том, что Nexus возвращает 200 OK, но пустую строку.Директивы местоположения NGINX для того же места

Мой рабочий процесс должен содержать NGINX файл, содержащий пустую строку 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?

ответ

1

Итак, вы разместили файл на /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; 
} 
+0

Спасибо, что делает все чувства в мире! Я пошел с первым предложенным вами решением, и он отлично работает. –

Смежные вопросы