2017-03-24 6 views
1

여러 애플리케이션에 대해 역 프록시로 작동하도록 docker에서 nginx를 실행 중입니다. 예를 들어, docker의 nginx가 위치 URL과 함께 작동하지 않습니다.

http://localhost/eureka/ will show http://registry:8761 
http://localhost/zipkin/ will show http://zipkin:9411 

나는 위의 구성이 작동하지 않습니다와의 nginx이 같은 오류를 던지고,

proxy  | 172.20.0.1 - - [24/Mar/2017:10:46:28 +0000] "GET /eureka/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36" 

그러나 아래의 구성이 http://localhost/ 작동

http { 
    server { 

     location /eureka/ { 
      proxy_pass http://registry:9761; 
     } 
    } 
} 

, 다음의 nginx conf의 시작 유레카 페이지를 보여주는.

http { 
    server { 

     location/{ 
      proxy_pass http://registry:9761; 
     } 
    } 
} 

내가 무엇을 놓치고 있습니까? nginx proxy_pass에 따라 작동해야하지만 작동하지 않아야합니다.

+1

두 위치가 다르다. URI /'eureka /'를'registry : 9761'으로 전달하고 다른 하나는'/'를 전달한다. URI가 업스트림으로 전달되기 전에 URI를 변경해야합니까? –

+0

nginx 뒤에 여러 응용 프로그램을 숨기고 싶습니다. URI 뒤에 전달 된 것이 있다면 전달되어야합니다./eureka/abc는 http : // registry : 9761/abc – jaks

답변

1

proxy_pass 지시어는 URI가 선택적으로 업스트림에 전달되기 전에 수정할 수 있습니다. /eureka/ 접두어를 제거하려면 URI /proxy_pass 문에 추가하기 만하면됩니다. 예를 들어

는 :

location /eureka/ { 
    proxy_pass http://registry:9761/; 
} 

URI를 /eureka/foohttp://registry:9761/foo에 매핑 될 것이다. 자세한 내용은 this document을 참조하십시오.

물론 이것은 문제의 절반에 지나지 않습니다. 대부분의 경우, 업스트림 응용 프로그램은 올바른 접두어 또는 경로 상대 URI를 사용하여 자원에 액세스해야합니다. 많은 응용 프로그램을 하위 디렉토리에 넣을 수 없습니다.

+0

에 전달되어야합니다. 유레카는 일했지만 지프 킨은 그렇지 않았습니다. – jaks