2017-02-25 8 views
3

간단한 설정을 nginx와 함께 사용하는 데 문제가 있습니다. 컨테이너에 nginx가 있도록 도커 컨테이너를 호스팅하는 서버가 있습니다. 그래서 url foo.com로 전화하십시오. 나는 foo.com/service1 실제로 다른 포트에서 foo.com으로 이동하기를 원합니다. 따라서 실제로는 foo.com:4321foo.com/service2을 당겨 foo.com:5432 등으로 당길 것입니다. 여기에 문제가있는 설정이 있습니다.Nginx 역방향 프록시 설정

http { 
    server { 
     listen 0.0.0.0:80; 

     location /service1/ { 
      proxy_pass http://192.168.0.2:4321/; 
     } 

     location /service2/ { 
      proxy_pass http://192.168.0.2:5432/; 
     } 

    } 
} 

그래서 서비스와 nginx는 192.168.0.2에 있습니다. 이것을 할 수있는 방법이 무엇입니까? 미리 감사드립니다.

부수적으로, 이것은 도커 컨테이너에서 실행 중입니다. 감사!

+0

호스트 서버에서'http : //192.168.0.2 : 4321 /'및'http : //192.168.0.2 : 5432 /'에 액세스 할 수 있습니까? –

+0

예, nginx를 실행하는 컴퓨터에서 두 개의 나열된 주소와 포트를 컬링 할 수 있으며 문제없이 해당 포트에서 내 로컬 컴퓨터의 페이지를 열 수도 있습니다. – user3003510

+0

curl'http : //192.168.0.2 : 4321 /'및'http : //192.168.0.2 : 5432 /'로 nginx 컨테이너에서 응답을받을 수 있습니까? – shizhz

답변

1
http { 
    server { 
     listen 80; 
     server_name foo.com; 

     location /service1/ { 
      proxy_pass http://192.168.0.2:4321/; 
     } 

     location /service2/ { 
      proxy_pass http://192.168.0.2:5432/; 
     } 

    } 
} 
+0

이것은 내가 가지고있는 것과 거의 같습니다. 나는 내가 게시 한 것과 동일한 결과를 얻는다. 504 gateway timeout – user3003510

1

당신의 문제는 Nginx 자체와 관련이 없지만 대신 Docker 네트워킹과 관련이 있습니다. 당신은 자세한 결론을 만들기 위해 충분한 정보를 제공하지만 여기에는 몇 가지 제안입니다 :

  1. 실행의 nginx 컨테이너가 실행 및 해당 컨테이너 (I '내부에서 curl을 시도 동일한 호스트에서 간단한 도커 컨테이너 귀하가 Nginx를 실행하는 서버에서 curl으로 전화를 걸 수 있지만 실제로 동일하지는 않습니다.

  2. 예를 들어, nginx 컨테이너를 실행하는 서버가 OSX 또는 Windows 인 경우 중간 Linux 가상 자체 네트워크 스택, IP 주소, 라우팅 등을 갖춘 컴퓨터

1

이것은 내 글래스 피시에게 보내는 내 conf입니다. proxy_redirect의 사용을 확인하십시오. & proxy_set_header X-NginX-Proxy true;

#Glassfish 
    location /MyService/ { 

      index index.html; 

      add_header Access-Control-Allow-Origin $http_origin; 

      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-NginX-Proxy true; 
      proxy_ssl_session_reuse off; 
      proxy_set_header Host $http_host; 
      proxy_redirect off; 
      proxy_set_header X-Forwarded-Server $host; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_pass http://127.0.0.1:18000/MyService/; 

    } 
2

나는 당신이 당신의 foo.com은 역방향 프록시 설정을 제거하여 먼저 올바른 IP 주소를 가리키는 여부를 확인한다고 생각합니다. 예 : 당신의 ip 주소가 이미 포트 80에서 실행되는 서비스가있는 경우

http { 
    server { 
     listen 80; 
     server_name foo.com; 

     location/{ 
     } 
    } 
} 

그렇다면, 당신은 나의 예처럼 각 서비스에 대한 server_name를 지정해야합니다. Nginx는 server_name으로 어떤 도메인에 응답 할 서비스 만 구별 할 수 있습니다.

* 내 생각에 server_name 옵션을 잊어 버린 것 같습니다.

관련 문제