2016-08-12 9 views
1

プライベートドッカーレジストリとしてNGINXの背後にあるNexus Repository Manager OSS 3.0があります。 My Dockerクライアント(公式のドッカークライアントではない)は200 OK、空のJSON文字列{}/v2/から返されます。私が実行している問題は、Nexusが200 OKを返しますが、空の文字列です。同じ場所のNGINXロケーションディレクティブ

NGINXに/v2/リクエストの空のJSON文字列を含むファイルを返し、/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; 
    } 
} 

私はこれが動作するように期待されるが、それはproxy_passへのすべてのトラフィック(/v2/, /v2/_catalog, /v2/myimage/manifests/latest、など)を指示します。 /v2/リクエストをempty.jsonファイルを削除する場所に移動させるにはどうすればよいですか?

答えて

1

/home/ubuntu/www/v2/empty.jsonにファイルを配置しましたか? ディレクティブは、URIを/v2/empty.jsonに書き換えてからlocation /v2/ブロックで処理するという問題があります。

一つの解決策は、書き換えられたURIと一致するように、別の場所を作成して、静的ファイルとしてそれを提供するために、次のようになります。

root /home/ubuntu/www; 

location = /v2/ { 
    index empty.json; 
} 
location = /v2/empty.json { 
} 

別の解決策は、error_pageディレクティブを使用することです。しかし、あなたはまだ、静的なファイルを処理するためにlocationrootを指定する必要があります。

location = /v2/ { 
    return 405; 
    error_page 405 =200 /static/empty.json; 
} 
location/{ 
    root /home/ubuntu/www; 
} 
+0

は、世界のすべての理にかなっている、ありがとう!あなたが提案した最初の解決策に行きました。 –