2016-09-13 5 views
0

내 VM (주소 x.y.z.w)의 포트 80에서 Nginx 도커 이미지를 사용 중입니다. 그래서 내 브라우저에서 http://x.y.z.w을 시도하면 Nginx 색인 파일이 표시됩니다. 이제라우팅 용 Nginx 구성

내가 원하는 무엇 포트 8081 및 8082을에 같은 VM에서 실행 내 두 개의 고정 표시기의 이미지 (기본적으로 프록시 통과를)를 구성하고이 들어

when I type http://x.y.z.w/a it should go to http://x.y.z.w:8081 
when I type http://x.y.z.w/b it should go to http://x.y.z.w:8082 

을 내 conf의에서 일부를 변경 파일 :

 location /a { 
     rewrite ^/a(.*) /$1 break; 
     proxy_pass http://x.y.z.w:8081 ; 
    } 

    location /b { 
     rewrite ^/b(.*) /$1 break; 
     proxy_pass http://x.y.z.w:8082 ; 
    } 

예상대로 작동합니다. 그러나 모든 이미지가 동일한 기계 (동일한 IP 사용)에 있으므로 x.y.z.w 대신 localhost을 사용하고 싶습니다. 하지만 localhost과 작동하지 않습니다.

기본적으로 IP는 미래에 변경 될 수 있으므로 링크에 하드 코드 된 IP (x.y.z.w)를 사용하고 싶지 않습니다.

Nginx는 실행중인 변수 IP를 알 수 있으며 그 IP를 사용할 수 있습니다. 또는 약간의 수정을 통해 localhost과 어떻게 작동합니까?

+0

docker 링크를 사용하십시오. https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/ – Tuan

답변

0

호스트가 아닌 컨테이너의 loopback을 참조하므로 다른 고정 표시 장치 컨테이너를 주소 지정하는 데 localhost을 사용할 수 없습니다. @ Tuan이 제안한대로 link (https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/) 컨테이너가 가능하므로 이름을 통해 통신 할 수 있습니다. 예컨대 :

docker run --rm -ti --name backend nginx:latest 
docker run --rm -ti --name proxy --link backend:backend nginx:latest 

지금 proxybackend 알고있다.

+0

x.y.z.w 대신 사용할 수있는 변수는 무엇입니까? nginx는 현재 실행중인 주소를 알고 있습니까? –

+0

Docker 컨테이너 및 해당 링크에 대해 모든 호스트 이름을 사용할 수 있습니다. Nginx에는 다양한 변수 - 요청의 호스트 이름도 있습니다 (http://nginx.org/en/docs/http/ngx_http_core_module.html#var_host). –

0

x.y.z.w이 (가) nginx.conf 일 때마다 $host으로 바뀌 었으며 정상적으로 작동하고 있습니다.

예를 들어

대신 proxy_pass http://x.y.z.w:8081 ;, 그것은

proxy_pass http://$host:8081 ; 이제 내 IP가 (x.y.z.w) 변경, 내 응용 프로그램에 영향을주지 않는 경우에 썼다.