인프런 커뮤니티 질문&답변

Yong Hwan Kim님의 프로필 이미지

작성한 질문수

풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]

Reverse Proxy 와 주요 nginx 웹서버 설정 익히기1

reverse proxy 할 때, nginx.conf와 dockerfile에 관하여 질문이 있습니다.

작성

·

198

0

색션 11 reverse proxy 관련 문의 드릴 것이 있습니다.

reverse proxy 위하여 nginx.conf 파일에서 어떤 port로 요청이 오면 어떤 container 로 연결할지 설정해주고 있습니다. 가령 아래 코드는 8080 포트로 연결이 오면 docker-nginx로 포워딩하여 nginx라는 container의 80 포트로 연결을 합니다.

upstream docker-nginx {

server nginx:80

}

listen 8080

location /{

proxy_pass http://docker-nginx

}

즉 위와 같이 nginx.confd에는 외부 포트와 container간의 연결이 정의되어 있는데요.. docker-compose 파일을 보면 port라는 key로 proxy 서버의 포트 연결을 또 정의 합니다.

ports:

-"8080:8080"

-"8081:8081"

 

즉 nginx.conf에서 외부 포트와 container간의 연결을 설정하면 docker-compose 파일에서 port 연결 명령은 필요 없을까요?

답변 1

0

안녕하세요. 답변 도우미입니다.

nginx.conf 파일에서 upstream과 location을 설정하여 요청을 특정 포트로 받으면 특정 컨테이너로 연결해주는 설정을 하고 있습니다. 예를 들어, 8080 포트로 요청이 오면 nginx라는 컨테이너의 80 포트로 포워딩해주는 설정은 다음과 같습니다:

```nginx

upstream docker-nginx {

server nginx:80;

}

server {

listen 8080;

location / {

proxy_pass http://docker-nginx;

}

}

```

이 설정은 reverse proxy 역할을 하는 nginx 서버의 설정입니다.

반면, docker-compose 파일에서 ports 키워드는 Docker 컨테이너의 호스트와 컨테이너 내부의 포트를 매핑하는 역할을 합니다. 예를 들어:

```yaml

services:

proxy:

image: nginx

ports:

- "8080:8080"

- "8081:8081"

```

이 설정은 호스트 머신의 8080 포트를 컨테이너의 8080 포트에 매핑하고, 호스트 머신의 8081 포트를 컨테이너의 8081 포트에 매핑하는 역할을 합니다.

이 두 설정은 상호 보완적인 역할을 합니다. nginx.conf 파일에서 reverse proxy 설정을 하더라도, docker-compose 파일에서 해당 컨테이너의 포트가 호스트와 연결되지 않으면 외부에서 접근이 불가능합니다. 따라서 docker-compose 파일에서 포트 매핑 설정은 여전히 필요합니다.

정리하자면:

- nginx.conf 파일: reverse proxy 설정 (외부 요청을 특정 컨테이너의 특정 포트로 포워딩)

- docker-compose.yml 파일: 호스트와 컨테이너 간의 포트 매핑 설정 (외부에서 해당 포트로 접근할 수 있도록 설정)

따라서 두 파일의 설정은 모두 필요하며, 각각의 역할을 이해하고 적절히 설정해야 합니다.

감사합니다.

잔재미코딩 드림