ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NGINX - URL별로 라우팅 하기
    Devops/NGINX 2019. 11. 5. 08:01
    반응형

      nginx 를 단순하게 사용하다가 최근에 url 의 특정 패턴별로 라우팅을 따로 해줘야하는 이슈가 생겼다. 별건 아니라고 생각했지만 보기보다 난이도(?) 가 있는 작업 이였다. 그래서 기록해 두려고 한다. 

     

     조건은 하나다 http://www.xxxx.com/a/aaa/bbb 이런 URL 에서 'aaa' 이부분이 달라질것이고 그에 따라 라우팅을 다르게 해주면 되는것이다. 실제 예를 들면  test, dev, stg, prod 이런식으로 바뀌어서 테스트서버 , 개발서버 , 스테이징 서버, 상용서버 를 각각 구분해주는것이다. 기존에 HAproxy 를 사용하고 있었으나 생각보다 많이 사용해보지 못한 부분이 있다보니 접근하기 쉬운 nginx 를 사용했고 현재는 잘 구성해서 사용중이다. 

     

            upstream product {
    
                    server 111.111.111.11:1111;
                    server 222.222.222.222:2222;
            }
            upstream stg{
    
                    server 333.333.333.333:333;
            }
            upstream test{
                    server test.co.kr:9001;
            }

    nginx.conf 에 다음과 같이 정의 해준다. http{} 영역안에만 넣어주면 되며 해당 블럭안에서는 위치는 딱히 정해지지 않은 상태서 편하게 입력하면 된다. 여기다 이렇게 설정만 해주는것은 실제 세부 설정은 별도로 해줬기 때문이다. 

    /etc/nginx/sites-enabled 이 파일에 설정을 해주게 되는데 폴더 안에 보면 default 파일이 있다. 다른파일로 만들어서 사용하려면 생성해서 설정만 해주면 된다. 난 귀찮기 때문에 default 를 사용할 것이다. 

     

    location  /stg/ {
                  rewrite ^/stg/(.*)$ /$1 break;
                  proxy_pass http://stg;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header Host $host;
            }
            location  /test/ {
                  rewrite ^/test/(.*)$ /$1 break;
                  proxy_pass http://test;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header Host $host;
            }
    
            location /product/ {
                  proxy_pass http://product;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header Host $host;
            }
            

    location 설정만하면 끝! location 에 인지할 url 을 경로를 설정해 준다. 저렇게 되면 해당 url 패턴이 감지 될경우 해당 라우팅 서비스로 동작하게 된다. 패턴이 감지 될경우 차기 몇가지 있는데 rewrite 라는 부분이다. product 는 url 이 들어올경우 그대로 해당 url 로 연결해주지만 다른경우는 test, stg 를 url에 포함시키켜서 다시 url 을 작성해서 요청하도록 설정 해놓았다 .

    stg 설정을 기준으로 간단하게 설명하면 stg 앞에 값까지는 그대로 유지하고 stg 를 붙인 상태에서 뒤에 모든 url을 그대로 붙여준다는 의미이다. 그리고 proxy_pass 에 보면 stg 라고 되있는부분은 nginx.conf 에서 stg 라고 설정한 upstream 을 의미한다. 저렇게 설정할경우 설정된 url 을 호출하게 되고 두개 이상일 경우 아무런 설정을 하지 않을때 기본 roundrobin 형태로 로드밸런싱을 하면서 호출하게 된다. 

     항상 이런건.. 알기전에 막막하지만 막상해보면 참 별것도 아닌거 같다. 

    반응형
Designed by Tistory.