WEB

Nginx의 reverse proxy 서버 설정 및 활용

우성군 5 24584 0

 

우선 위의 도식도를 잘 살펴봅니다.

 

ASUS RT-AC66U(R) 공유기가 웹서버 역할을 하면서, 오드로이드, 포고플러그에 이어 3번째 웹서버가 되었습니다.

 

저는 www.wsgvet.com 도메인을 구입하였기 때문에 이 도메인을 최대한 활용하고 싶었습니다.

 

물론 각각의 웹서버에서 포트를 열어서 각자 구동이 가능했지만, 주소도 이상하고 서버 설정도 

 

주먹구구식이 될 것 같아 하나로 모으고 싶었던거죠.

 

포고리눅스 네이버 카페에서 nova님의 도움으로 리버스프록시 서버의 개념을 알게되었고

 

일단 기본적으로 포고만 적용하고 있었습니다. 포고플러그도 NGINX였기 때문에 별다른 어려움은 없었지만

 

사실 리버스프록시의 개념을 몰랐기 때문에 활용하기엔 제한된 상황이었습니다.

 

 

그래서 오늘 좀 찾아보니 이해가 되기 시작했습니다.

 

일단 http 신호는 80포트가 기본이기 때문에 포트포워딩은 필수입니다.

 

오드로이드의 내부80포트, 외부80포트로 개방해주고, 나머지 웹서버는 포트포워딩을 다 삭제합니다.

 

그러면 웹서버로 들어오는 통로가 하나만 되는거죠. 이것만해도 보안에 상당히 도움이 됩니다.

 

전문가가 아니라 더이상의 설정은 잘 모르지만요 ㅎㅎ

 

 

 80포트로 신호가 들어오면 오드로이드의 NGINX에서 교통정리를 합니다.

 

만약 www.wsgvet.com으로 들어오면 그냥 오드로이드의 NGINX만 구동이 되는거구요.

 

www.pogovet.com 이라는 신호가 들어오면 포고플러그로 보내는거죠.

 

그리고 asus.wsgvet.com이라는 신호가 들어오면 다시 공유기로 보냅니다.

 

공유기는 Lighttpd가 깔려있어서 안될줄 알았는데 잘 되더군요 ㅎ.

 

 

그럼 간단하게 설명드리면

 

1. 오드로이드U2 : 내부80, 외부80포트 개방됨. Nginx

    80포트의 모든 신호를 다 받음. 자체 웹서버 및 리버스프록시 서버로 교통정리까지 수행.

 

2. 포고플러그E02 : Nginx포트 80, 포트포워딩X, 내부IP : 192.168.1.130

   오드로이드에서 www.pogovet.com이라는 신호가 오면 포고에서 받음.

 

3. ASUS RT-AC66U(R) : Lighttpd 포트 81, 포트포워딩X, 내부IP : 192.168.1.1

   오드로이드에서 asus.wsgvet.com 이라는 신호가 오면 공유기에서 받음.

 

 

이제 정리가 되었으니 오드로이드의 Nginx 설정만 추가해주면 모든 것이 끝납니다.

 

제 설정을 보여드립니다. 모두 오드로이드의 etc/nginx/sites-availabe/default 안에 있는 부분입니다.

 

 

1. 메인 웹서버 오드로이드U2 Nginx 설정 부분

 

server {

listen 80;

listen [::]:80 default_server ipv6only=on;

client_max_body_size 100M;

 

root /var/www/www;

index index.html index.htm index.php;

autoindex off;

 # Make site accessible from http://localhost/

server_name www.wsgvet.com localhost;

}

 

아까 말씀드렸던 기본 80포트이구요, www.wsgvet.com으로 들어오면 메인웹서버의 페이지가 열립니다.

 

 

 

2. 포고로 안내하는 리버스프록시 서버 부분

 

www.pogovet.com pogovet.com  이렇게 들어오면 포고의 웹서버 페이지가 열립니다.

 

아까 포고의 내부IP주소가 192.168.1.130 이라고 했죠? ㅎㅎ 포트는 기본 80이기 때문에 안적어도 됩니다.

 

다른 포트라면 192.168.1.130:8888 이런식으로 적어주면 됩니다.

 

server {

listen 80;

server_name www.pogovet.com pogovet.com;

location / {

        proxy_redirect     off;

        proxy_pass_header Server;

        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Scheme $scheme;

        proxy_pass http://192.168.1.130/;

}

 

}

 

 

 

3. 이제 asus.wsgvet.com으로 들어오는 신호의 경우입니다.

 

내부아이피 주소는 192.168.1.1이고 Lighttpd의 포트가 81이기 때문에

 

192.168.1.1:81 이런 식으로 지정해주었습니다.

 

위와 같은데 이번엔 외부링크 방지 부분이 추가되었습니다.

 

포고의 경우 포고의 nginx에서 외부링크 방지 부분이 작동했는데

 

asus의 Lighttpd의 경우 구글링해서 적용했는데도 잘 안되더군요.

 

그냥 오드로이드 설정에서 해결가능하더군요 ㅎㅎ

 

혹시 외부링크 방지 하시려면 밑의 부분을 잘 참고하셔서 적용하면 됩니다.

 

server {

listen 80;

server_name asus.wsgvet.com;

        

       location ~* \.(png|gif|jpg|jpeg|swf|ico)(\?[0-9]+)?$ {

valid_referers none blocked asus.wsgvet.com *.wsgvet.com;

if ($invalid_referer) {

return   403;

                       }

proxy_pass             http://192.168.1.1:81;

}

 

location / {

        proxy_redirect     off;

        proxy_pass_header Server;

        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Scheme $scheme;

        proxy_pass http://192.168.1.1:81;

        proxy_redirect         off;

        client_max_body_size 100M;

     }        

 

}

 

여기까지가 오드로이드 설정이고

 

포고의 Nginx 설정은 일반적인 설정과 정확하게 같습니다.

 

서버 네임부분에 www.pogovet.com으로 들어가고요. 포트도 80. 이러면 됩니다.

 

공유기 부분은 그냥 제가 어제 적은 가이드(링크)대로 두시면 됩니다. 서버 네임 안적어도 포트만 맞다면 

 

잘 불러오게 됩니다.

 

 

 

리버스프록시 서버에 대해 궁금증이 풀리셨는지 모르겠네요.

 

끝까지 읽어주셔서 고맙습니다.





, , , , , ,

5 Comments
Thomas Yoon 2015.06.12 03:05  
몇년 전 글이지만 딱 지금 제가 찾고 있던 정보인데... 감사합니다.
NGINX 말고 아파치에서도 동일한 구조로도 가능하겠죠? 아니면, NGINX 추가 설치해서 80번 포트 주고 리버스프록시 서버용도로만 사용해도 되겠군요.
우성군 2015.06.12 13:44  
아파치 부분은 잘 모르겠습니다.

nginx가 참 물건인 것 같습니다 ^^
선구자 2016.12.11 20:46  
구글링 하다가 우성군님 홈페이지 들어왔습니다.

선댓글 후 적용입니다.

다시 댓글 남기겠습니다
감사합니다.
우성군 2016.12.11 21:03  
[@선구자] 넵 ^^;;
선구자 2016.12.11 20:46  
스크랩
Facebook Twitter GooglePlus KakaoStory NaverBand