Hyunseok
현재 사이트는 2024년 11월 이후로 업데이트 되지 않습니다. 새 글은 블로그로 확인해주세요. 블로그로 이동
프로그래밍/이론복습 [이론 복습] nginx, 리버스 프록시, 로드밸런싱
2022. 10. 3. 05:19

현재 사이트는 2024년 11월 이후로 업데이트 되지 않습니다. 새 글은 블로그로 확인해주세요. 블로그로 이동

이번 학원 팀 프로젝트에서 사용한 nginx..

그리고 도메인을 묶질 못하는 무료 오라클 클라우드를 위한 nginx proxy manager..

 

잘 생각해보면 여태 난 nginx를 그저 "엄청 빠르고 리버스프록싱을 가능하게 해주는 웹서버" 정도로만 알고 있었고

 

그렇게 쓰고 있었다

 

문득 새벽에 생각난 내용.. nginx가 무엇인지 알아보자

 

 

--

 

https://ko.wikipedia.org/wiki/Nginx

 

Nginx - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

 

위키피디아 사랑해요.. 

 

정확한 내용들은 아니겠지만 그래도 대강적인 내용은 알 수 있다

 

일단 만든 목적은 "아 왜 처리를 못하는데 답답하네" 하면서 자기가 만든 게 nginx라 한다

 

조금 더 있어 보이는 명칭을 쓰면 C10k problem이라는데 아래의 글을 참고하자 

 

https://ja.wikipedia.org/wiki/C10K%E5%95%8F%E9%A1%8C

 

C10K問題 - Wikipedia

出典: フリー百科事典『ウィキペディア(Wikipedia)』

ja.wikipedia.org

본문에 나와있듯 

" 아파치 http서버나 웹서버 소프트웨어와 클라이언트 간의 통신에 있어서, 클라이언트가 약 1만 대에 달할 경우 웹서버의 성능이 남아있지만 이와 상관없이 response성능이 크게 저하되는 문제"라고 적혀있다 

 

1만 대.. 1만 대를 비동기 처리한다 왠지 당연할 것 같다

 

지금 시대에 10기가 광랜의 시대라지만 옛날에 그 느린 통신속도로 1만 개의 처리를  비동기 형식으로.. 처리하면

 

느려지는 게 당연한 것 아닐까? 

 

또한 이미 19년 전에 이 주제에 대해 말이 있는 걸 찾아냈다

https://www.gpgstudy.com/forum/viewtopic.php?t=2097 

 

c10k 문제라는게 뭔지 알고 싶습니다. - GpgStudy 포럼

3권에서 새로 도입된 네트웍 및 멀티플레이어 프로그로그래밍 섹션을 위한 게시판입니다. 운영자: 류광 쌀밥 전체글: 1058 가입일: 2003-02-02 20:23 사는 곳: THQ Inc. 연락처: 전체글 글쓴이: 쌀밥 » 2003

www.gpgstudy.com

 

저 당시 기준 20년 전의 이야기도 막 오고 가는데.. 그러면 대체 ㄸ..

 

여하튼 이것을 해결했다 하면 비동기 I/O가 아닌 방식의 웹 서버 프로그램이라 이해할 수 있다 

 

이런 영상도 있으니 참고

https://www.youtube.com/watch?v=JKxlsvZXG7c 

 

여하튼 nginx와 아파치 웹서버를 비교하면

아파치 : 1:1 전담 마킹 택배서비스, 차량 한 대가 택배 하나를 담당한다

nginx: 우리가 아는 택배서비스, 일단 물류창고에 싹 다 들여놓고 급한 택배부터 싸악 처리한다

 

라고 생각할 수 있겠다 

 

사설이지만.. 중학교 시절 xampp 쓸 때 그 아파치가 그리 무겁게 느껴졌는데.. 무거운 이유가 이런 이유 아닐까??

 

 

자, 여기서 또 알아보자 그럼  nginx로 어떤 것을 할 수 있을까 

 

대표적인 것들을 나열해보자면

 

1. 정적 웹 파일 배포

2. 프록싱

3. 리버스프록싱

4. 로드밸런싱

 

이 정도이지 않을까 

 

1번 정적 파일 배포는 뭐.. /etc/nginx/con.f/default or /nginx/nginx.conf였나;? 여기 적힌 경로의 파일들을 잘 배포해준다 

물론 기본 포트는  80번으로.. 아주 잘해준다

 

2번 프록시도 다 아는 프록시다 

역시 세팅 파일에서 ~ /example { proxy_pass : 주소 } 설정해두고

example로 요청한 내용을  nginx가 주소로 둔갑해 자기가 받아와준다

요런 식으로 CORS문제도 해결이 가능해진다 사랑해요 nginx..

 

3번 리버스프록시는 말 그대로 프록시의 반대 기능이다 

내부에서 외부로 가는 것을 상정했다면 이건 외부에서 내부를 찍어준다 

 

예를 들어 내가 :8090 포트를 공개하고 싶은데 이걸 다르게 바꾸고 싶다

혹은 도메인의 특정 주소로 받고 싶다! 이럴 때 쓴다 

 

예를 들어 외부에서 ex.example.com 이라는 서브도메인을 가진 주소를 요청하면 :8090의 주소로 보내는.. 그런 개념이다

 

이렇게 하면 nginx가 털리지 않는 이상 내부 서버들을 nginx를 이용해서 감쌀 수 있게 되어 보안성도 올라가게 된다

 

nginx 본체에서는 리버스프록시 세팅을 해본 적은 없고.. nginx를 이용한 nginx proxy manager라는 녀석이 있다 

https://nginxproxymanager.com/

 

Nginx Proxy Manager

Docker container and built in Web Application for managing Nginx proxy hosts with a simple, powerful interface, providing free SSL support via Let's Encrypt

nginxproxymanager.com

무려 GUI!!  외부 접속도 가능해서 매우 편하다 서버 하나 열고 리버스 프록시 필요할 때 항상 이 친구로 설정해준다

무려 SSL 인증서까지 let's encrypt에서 바로 해준다! 

 

흑흑 너무 좋아 nginx..

 

4. 로드밸런싱

이번에 구글 좀 돌다가 연관검색에서 자꾸 떠있길래 알게 되었다 

 

뜻을 풀어서 기능을 설명하면.. " 같은 여러 개의 서버에 한 주소를 묶어서  각 서버의 부하에 따른 요청을 분기해주는 기능"이라고 이해했다

 

처음에 딱 읽었을 때는 " 아니 이걸 그럼 로직을 하나하나 다 짜야한다는 거야? 트래픽 들어오는 거 다 계산하고 알맞게?? "

라고 생각하고 그럼 nginx와 무언가의 프로그램이 필요할 줄 알았는데.. 그런 거 없다 갓-nginx는 이미 그런 것들도 다 만들어놨다

 

nginx설정들을 구글링 하다 보면 간간이 나오던 upstream.. 여기다 로드밸런싱 타입을 쓰고 그냥 저장만 하면 nginx가 자기가 알아서 다 해준다

 

너무 감격적이다.. 왜 이 프로그램이 무료인 거지.. 흑흑하면서 눈물을 흘렸다 

 

 

.. 여하튼 여기까지  nginx가 무엇인지, 어떤 기능이 있는지를 알아봤다

 

 

마지막으로 한마디..

 

사랑해요 nginx!

'프로그래밍 > 이론복습' 카테고리의 다른 글

[이론 복습] OSI 7 계층  (0) 2022.10.10
[이론 복습] 자료 구조  (0) 2022.08.14

프로그래밍/이론복습의 다른 글