eruLabo

Web Dev. erusya's Blog

진행하는 프로젝트 중의 하나가 마스터 소스로 돌아갈 계획입니다.

마스터 소스에서 하위에 클라이언트가 붙고 클라이언트는 아래처럼 각자 고유 url 주소를 부여 받습니다.


고객1: domain.com/asia/

고객2: domain.com/africa/


마스터 소스는 domain.com 의 루트에 종속되어있으므로 실제로 asia 와 africa 의 폴더명은 존재하지 않습니다. 말그대로 클라이언트 구분에만 쓰이는 지시자이죠.

그래서 asia 클라이언트가 domain.com/board/list.php 에 접근한다면 실제로는 domain.com/asia/board/list.php로 접근해야만 asia 클라이언트 만의 게시판 페이지가 보이는 겁니다.


원래라면 asia.domain.com 처럼 서브 도메인으로 이런 처리를 진행하지만 현재 진행하고 있는 프로젝트 특수성 상 하위도메인으로 이것을 구분해야 합니다.



여튼 이런경우는 nginx 의 rewrite 기능을 사용하기가 좀 애매하고 proxy_pass 기능을 이용해서 루트경로로 호출을 전환해줄 겁니다.

역방향 프록시에 대해서는... 지금 이 글을 쓰는 상황에서도 이해안가는게 있어서 자세하게 설명하긴 뭐하고 출처의 링크에 관련 기술문서와 설명해주신 분들에 대한 정보를 남길게요.



우선 위에 경우에 대해서 적용한 제 nginx 설정은 아래와 같습니다.


vi /etc/nginx/sites-available/default

# sub directory setting
location ^~ /asia {
proxy_pass http://localhost/;
}


출처2의 경우처럼 마지막에 뎁스 구분자인 슬래시(/)의 표현 위치에 따라 프록시에 전달되는 링크의 차이가 크더군요.

저같은 경우는 /asia로 요청된 건에 대해서 루트로 옮겨야해서 위에 처럼 적용했습니다.


경우에 따라서는 출처2의 내용을 참고해서 조정하면 될것 같아요.



더해서 프록시 연결을 받는 location 에는 아래 코드를 추가해줍니다. 프록시 연결이 장기간 되지않을 경우 타임아웃을 걸어 핸들링을 관리합니다.


vi /etc/nginx/sites-available/default

proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 3000;



또 더불어 프록시 연결시에는 프록시 서버가 일부 헤더 설정을 덮어씌웁니다. 대표적으로 requested_uri 설정을 많이들 덮어 쓴다고 하더라고요. 그래서 프록시 설정부분에 아래 코드를 더 추가해줍니다.


vi /etc/nginx/sites-available/default

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;


최종적으론 아래 그림과 같이 nginx 설정이 되어있어야 합니다.

각자 fastcgi 설정이나 php 설정은 약간 다를 수 있습니다.





Nginx 어렵다!!



Ref.1: Module ngx_http_proxy_module 

Ref.2: nginx: proxy_pass 의 마지막 슬래시 여부에 따른 처리 

121 Views | 0 Comment
Profile Image
erusya

안녕하세요, erusya 입니다.
현직 풀스택 개발자로 일하는 중이고 요즘은 기획업무도 경험을 쌓고있습니다.
방문해주셔서 고마워요!


Recently Comments

Visitors