2016-11-05 5 views
1

나는 3 (응용 프로그램 클라이언트, 응용 프로그램-A, 앱 b)는 응용 프로그램이 부두 서버와 하나의 nginx 부하 분산 (응용 프로그램 파운드)에서 실행되고 있습니다. 모든 (내부 또는 외부) 요청은로드 밸런서를 통해 내 응용 프로그램에 전달됩니다. 웹 컨텍스트 (/ app-a/또는/app-b /) 이름에 따라 LB는 요청을 올바른 응용 프로그램으로 전달합니다. LB (location/app-a/및 location/app-b 및 location/app-client)를 구성했습니다. app-a는 app-b를 호출하고 app-b는 app-a를 호출하고 app-client는 외부에서 호출되며 app-client는 app-a 또는 app-b를 호출합니다.부두 노동자의 jwilder/nginx를 프록시 위치 구성

나는 내 응용 프로그램에 대한 도커 - 작곡가를 작성했습니다. 순환 종속성을 피하기 위해 Docker net을 사용했습니다. 그것은 잘 작동하고 있습니다. 내 응용 프로그램을 확장 할 경우

. LB는이 새로운 응용 프로그램 컨테이너에 대해 알지 못합니다.

자습서가 거의없고 NGINX 대신 jwilder/nginx-proxy을 사용하려고했지만 사라졌습니다. 나는 VIRTUAL_HOST = 앱 이름 변수가 구성 file.But 상류 업데이트됩니다를 사용하여 내 응용 프로그램이 요청이 컨테이너를 수정 갈 것 어떻게 지정하지 않은 각 container.if에 대한 위치 매핑을 기반으로 실행되는 것을 사용하는 경우.

LB의 default.conf 파일에 위치 매핑을 지정하는 방법은 다음과 같습니다.이 구성은 컨테이너에 의해 동적으로 업데이트되었으므로 또는 내부 통화 URL을 만드는 방법입니다.

location /app-a { 
      proxy_pass http://app-a; 
    } 
    location /app-client { 
      proxy_pass http://app-client; 
    } 


    location /app-b { 
      proxy_pass http://app-b; 
    } 
Request from outside: http://IP:9090/app-client/ 
Internal call : http://app-lb:80/app-a/ 
       http://app-lb:80/app-b 

    LB exposed port no is 9090 

답변

1

가상 경로를 지원하는의 nginx 프록시 이미지 풀 요청 (e.g. #599)있다. 이를 구현하려면 원본 이미지를 사용하고 자신의 nginx.tmpl 파일을 컨테이너에 (볼륨 마운트와 같이 -v $(pwd)/nginx.tmpl:/app/nginx.tmpl:ro과 같이) 전달하면됩니다. 그런 다음 컨테이너는 VIRTUAL_PATHVIRTUAL_HOST처럼 정의해야합니다.

나는 또한의 nginx 프록시 용기에 DEFAULT_HOST을 설정하는 것이 좋습니다 당신은 호스트 기반 라우팅을하지 않으려면 그 모든 사람 지점이있을 것이다.

주 # 599로, 나는에 실행 된 nginx.tmpl에 버그가있다, 당신은 {{ range $container := .Containers }} (범위 .Networks을 재정의 .을 재정의) 전에 수 {{ $networks := .Networks }}이 최대 라인을 이동해야합니다. 그렇지 않으면 모든 네트워크에 연결할 수있는 것으로 간주되며 nginx-proxy가 도달 할 수없는 다른 네트워크에도 컨테이너가 연결되어 있으면 시간 초과가 발생합니다.

+0

나는 dockercloud-haproxy을 사용할 계획입니다. 그것은 가상 경로와 호스트를 가지고 있습니다. 이 질문에 나를 제안하십시오 – Gnana

+0

위 질문은 jwilder의 nginx-proxy에 대한 질문입니다. 나는 dockercloud-haproxy에 대한 조언이 없기 때문에 그것은 다른 질문 일 것입니다. – BMitch