본문 바로가기
가상화 - vmware, docker/docker

[Docker] Win10에서 Nginx로 Load Balancing 하기 (Feat. 502 bad gateway, docker-compose)

by 프룹 2022. 2. 8.
반응형

 

nginx로 로드밸런싱을 설정해주는 블로그들이 다양하게 있다.

여러 블로그를 따라 하면서 헷갈리는 점이랑 실제 시행착오를 통해 얻은 내용을 정리하고자 한다.

이 간단한걸 대충 10시간은 넘게 헤맸던 것 같다.

 

Nginx로 로드밸런싱을 하는데 있어 특별한 점은 Docker-compose를 사용한다는 점이다.

 

docker-compose를 여러워 할 필요는 없다.

compose를 사용하면 compose 컨테이너 밑에 (compose 컨테이너라는 표현이 맞는지는 모르겠지만) 사용하고자 하는 컨테이너가 자동으로 생성되고 실행된다. 즉, 일일이 키고 끌 필요가 없다.

 

docker-compose.yml 파일을 하나 만들고 다음과 같이 내용을 채우면 된다.

사실 networks는 필요없는 것 같다.

 

nginx의 conf 파일을 수정하기 쉽게 하기 위해서 volumes를 통해 nginx.conf 파일을 동기화 시켜주었다.

 

다음은 nginx.conf 파일이다.

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    # 아래 include를 주석처리하지 않으면
    # 로드밸런싱 동작이 아니라 웹서버 동작을 하게 된다.
    #include /etc/nginx/conf.d/*.conf;	# <- 반드시 주석

    upstream jflix {
    	
        # ip를 localhost로 넣으면
        # 502 bad gateway가 뜬다.
        #server localhost:5000;
        #server localhost:5001;
        
        server 169.254.167.185:5000;
        server 169.254.167.185:5001;       
    }

    server {
        listen 80;

        location / {
        	proxy_pass http://jflix;
        }
    }
}

ip는 호스트 ip주소를 넣으면 된다. 그러니 동작을 했다...

 

정확한 이유는 모르겠는데, tomcat 서버의 주소를 localhost로 넣게되면 502 bad gateway가 발생한다.

예상하는건 localhost가 nginx 입장에서 localhost로 판단하기 때문에 host의 localhost가 아니라 nginx 내부에서 5000, 5001 포트를 찾게된는 것 같다. 그래서 5000, 5001에 아무것도 없 거니와 접근할 수 없는 포트이기 때문에 오류가 나는 것 같다.

 

반응형

댓글