Nginx의 reverse proxy 서버 설정 및 활용
컨텐츠 정보
- 37,586 조회
- 5 댓글
- 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. 이러면 됩니다.
공유기 부분은 그냥 제가 어제 적은 가이드(링크)대로 두시면 됩니다. 서버 네임 안적어도 포트만 맞다면
잘 불러오게 됩니다.
리버스프록시 서버에 대해 궁금증이 풀리셨는지 모르겠네요.
끝까지 읽어주셔서 고맙습니다.
-
등록일 2020.09.18
-
등록일 2020.09.08도커 허브에서 매일 이미지 빌드하기댓글 2
-
등록일 2020.09.08
-
등록일 2020.07.19
관련자료
-
서명우성짱의 NAS를 운영하고 있습니다.
저의 즐거움이 여러분의 즐거움이면 좋겠습니다.