미국 공학박사의 코딩 연구소


공 지

본 사이트는 지속적으로 업데이트 되고 있답니다. 혹시, 화면 구성이 이상하게 보인다면, "Ctrl+F5"를 이용하여 "새로 고침"을 시도해 보세요.

Linux 사용 시 겪게 되는 문제 해결 방법들을 이곳에 틈날때마나 하나씩 올릴 계획입니다. 도움이 되길 바래요.












Reverse Proxy 구축하기

Reverse proxy 서버 구축하는 방법을 소개할게요.
언제 reverse proxy를 사용하는지 먼저 알아보구요.
무료로 다운받을 수 있는 nginx 서버를 이용해서 reverse proxy를 구축해 보지요.
단, Ubuntu를 OS로 사용한다는 점 잊지 마세요.





Reverse proxy 서버는 언제 필요한가요?

Reverse proxy란, 클라이언트 대신 서버로부터 필요한 자료를 가져와서 클라이언트에 다시 전달하는 proxy 서버의 일종이예요.
이러한 reverse proxy 서버가 사용되는 한 가지 경우는, 웹 서버와 클라이언트 사이에 배치되는 경우인데요. 예를 들어, Tomcat으로 웹 서버를 1.2.3.4라는 ip주소를 갖는 컴퓨터에 구축했다고 가정해 보지요. 그리고, Tomcat 웹 서버에 my_web_site라는 웹 사이트(site)/어플리케이션(application)를 돌린다고 가정해 볼게요.
그러면, 웹 사이트 my_web_site에 접속하고자 하면, Tomcat의 포트번호는 8080이니 웹 브라우저에서 http://1.2.3.4:8080/my_web_site 라고 주소창에 입력해야 하지요.
하지만, 웹 브라우저에서 주소창에 입력해야 하는 주소가 길지요? 그래서, 보통 www.my_web_site.com과 같은 도메인(domain)을 사서, http://www.my_web_site.com와 같이 그 도메인 주소를 통해서 사이트에 접속하게 만들고 싶어한답니다.
도메인을 이용해서 접속한다면, 웹 서버에서는 웹 브라우저를 통해 들어오는 요청을 실제 사이트 주소인 http://1.2.3.4:8080/my_web_site로 연결을 시켜줘야 겠지요? 바로, 이것을 reverse proxy가 해주게 된답니다.
그리고, 우리는 reverse proxy를 nginx라는 무료 소프트웨어로 구축할거랍니다.




Nginx 서버 구축하기

웹 서버를 돌리고 있는 컴퓨터(위의 설명에서는 1.2.3.4라는 ip주소를 갖는 컴퓨터)로 가보세요.
먼저, 터미널(Terminal)을 열고, 아래와 같이 명령을 이용하여 nginx를 설치해 볼게요.

$ sudo apt-get update
$ sudo apt-get install nginx

그리고, nginx가 외부와 통신이 가능하도록 방화벽(ufw)을 설정해줘야 해요.
아래 줄1의 명령을 실행하면, ufw가 인식하고 있는 application profile들을 출력하는데요. 줄2에서 처럼 'Nginx HTTP' profile을 외부와 소통이 가능하도록 허용(allow)해 줄게요.

$ sudo ufw app list
$ sudo ufw allow 'Nginx HTTP'

다음 단계로 넘어가기 전에, 한 가지 짚고 넘어갈게 있어요.
우리가 웹 브라우저에 http://www.my_web_site.com이라고 주소창에 입력하면, 입력한 주소는 DNS(Domain Name Server)라는 것을 거치게 된답니다. 그러면, DNS는 www.my_web_site.com과 함께 등록되어 있는 ip주소 1.2.3.4를 찾아서, 주소를 http://1.2.3.4:80/으로 교체한답니다.
앞서 언급된 적이 없는 ":80"이라는 것이 뒤에 붙었지요? 80은 웹 서버를 위해 기본으로 약속되어 있는 포트(port)번호로, 보통 웹 브라우저에 입력할 때 생략된답니다. 즉, http://www.my_web_site.com는 사실 http://www.my_web_site.com:80 인 것이죠.
웹 브라우저에 입력한 주소가 DNS에 의해 http://1.2.3.4:80/ 으로 교체되면, ip주소가 1.2.3.4인 컴퓨터에 포트번호 80을 가지고 돌고 있는 웹 서버를 찾게 된답니다.

그럼 이제 다음 단계로 넘어가서, 웹 브라우저를 통해 들어온 접속 요청을 실제 웹 사이트 주소인 http://1.2.3.4:8080/my_web_site로 연결 시켜보지요.
앞서 웹 서버 컴퓨터에 nginx를 설치 하면, /etc/nginx의 경로에 nginx 관련 파일 및 폴더들이 있는 것을 볼 수 있어요.
폴더 /etc/nginx/sites-available 안에 my_reverse.conf라는 파일을 생성하고, 아래의 내용을 삽입 후 저장하세요.

server {
	listen 80;
	location / {
		proxy_pass http://localhost:8080/my_web_site/;
	}
}

위의 코드를 server block이라고 부르는데요.
줄2는 포트 번호 80를 대상으로하는 요청을 처리하겠다는 의미랍니다.
줄3은 들어온 요청 주소의 루트(root) 경로"/"를 의미한답니다. 즉, "http://1.2.3.4:80/"을 의미하는 것이지요.
줄4에서는 받은 요청을 http://localhost:8080/my_web_site/로 연결시킨다는 의미지요. 조금 더 자세히 설명하면, 컴퓨터 자신(localhost)에 포트번호 8080을 가지고 있는 웹 서버안에서 my_web_site라는 context path를 가지는 사이트로 연결시킨다는 의미랍니다.
위의 코드를 종합적으로 이야기 해보면, "http://1.2.3.4:80/"라는 요청이 ip 주소가 1.2.3.4인 컴퓨터로 들어오면, 내부적으로 그 요청을 "http://localhost:8080/my_web_site/"로 돌리는 것이랍니다.

위 서버 블락(server block)를 저장했으면, 아래와 같이 터미널에 명령을 입력하여, reverse proxy 서버가 작동하도록 해볼게요.

$ sudo ln -s /etc/nginx/sites-available/my_reverse.conf /etc/nginx/sites-enabled/my_reverse.conf
$ sudo service nginx configtest
$ sudo service nginx restart

줄1에서는 저장한 서버 블락을 사용 가능한 상태로 만들어 주는 것이구요.
줄2는 새로 저정한 서버 블락이 정상적으로 코딩이 되었는가를 확인하는 것이랍니다.
줄3에서는 nginx서버를 재시작 하는 것이지요.






발자취

2019-09-11 "키클 코딩랩 - 미국 공학박사 아빠의 코딩 연구소"로 이름 변경
2019-06-28 코딩 교실 공개
2019-03-18 코딩 교실 제작 시작

바로가기
Python 배움터
C/C++ 배움터
About
Contact
Privacy Policy
강의목록
질문하기
처음으로