Dangil project(8)

Junyoung·2024년 5월 23일

Dangil Project

목록 보기
8/20

SSL 적용을 완료하고, 서버에 리버스 프록시를 적용하려고 한다.

위 그림처럼 서버단의 프록시 서버가 모든 요청을 받아서 처리해준다.

내가 생각하는 큰 장점으로는
1. 호스트의 포트를 노출시키지 않아도 된다.
2. 모든 요청에 공통적으로 SSL 적용이 가능하다.

그러면 이제 Nginx 를 구축해보자

NginX 는 굳이 dockerfile 을 둘 필요가 없다 ! docker Compose 에서 포트는 지정하고
엔진엑스 기본 설정으로 포트 포워딩을 진행한다 !

config.conf 에는 기본 스레드 수 등을 조정할 수 있으나, 현재 수준에서는 건들일게 없다

또한 conf.d 에 로드 밸런싱 설정을 할수있다. Nginx는 실행시 해당 디렉터리에 들어있는 conf 파일들을 모두 include 해서 사용한다 .

vi default.conf
server {
    listen 80;
    listen [::]:80;
    server_name dangil.store;
    access_log off;

    location /.well-known/acme-challenge/ {
        allow all;
        root /var/www/certbot;
    }

    location / {
        // return 301 https://$host$request_uri;
        return 308 https://$host$request_uri;
    }
}

map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {
    listen 443 ssl;
    server_name dangil.store;
    include /etc/nginx/conf.d/service-color.inc;

    # 서트봇이 볼륨으로 남겨두는 인증서를 가지고 이미지를 만들었고 엔진엑스 컨테이너에서 해당 인증서를 사용한다.
    ssl_certificate /etc/letsencrypt/live/dangil.store/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/dangil.store/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # 부적절한 헤더도 요청을 허용한다.
    ignore_invalid_headers off;

    location /api/ws {
        resolver 127.0.0.11 valid=30s;
        proxy_pass http://spring_$spring_color:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }

    location /api {
        resolver 127.0.0.11 valid=30s;
        proxy_pass http://spring_$spring_color:8080;
        proxy_set_header X-Forwarded-Host $server_name;

        # 디폴트로 IP는 프록시로 변경되고 난뒤에 (리버스 프록시 기능)
        # 원래의 요청의 헤더에 설정을 수정 및 추가한다
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

}

따라서 나는 해당 설정을 통해서 리버스 프록시의 기본 설정을 지정해줬다.

http 요청시 https로 redirect 해주고 있다.

vi service-url.inc
set $spring_color blue;

추후 가변적인 로드 밸런싱을 위해 컨테이너 이름( 도커 DNS )를 환경변수로 지정했다.

해당 Nginx 를 공부하며 의문점이 들었다...

포트와 http/https 의 개념이 확실하게 잡히지 않았다.

그러면 dangil.store:9999 | dangil.store/jenkins

→ 이렇게 들어오는 요청은 다르다 !

첫번째 요청은 http 던 https 던 중요하지 않다 왜? 포트를 직접 정했기 때문이다 !

두번째 요청은 포트번호가 없기에 앞에 http | https 를 보고 포트번호에 접근한다 따라서 리버스 프록시를 타고 들어가는 것이다 !

이처럼 리버스 프록시는 포트번호를 숨겨주는 장점이 있다.

이후 컨테이너를 가동시키면 성공적으로 로드 되는것을 확인했다.

참고
https://narup.tistory.com/238

profile
라곰

0개의 댓글