[Nginx] Nginx 공부에서 프록시 공부까지

kubit·2023년 7월 21일

Nginx

목록 보기
2/3
post-thumbnail

이번 글에서는 "Nginx 웹 서버의 역할"이 메인인데, 우선 Web Server와 WAS에 대해서 먼저 짚고 넘어갈려고 해요. (이유는 글을 읽다보면 "아 ~ 이래서?" 할거라구요. 그러니까 그냥 봐.)

Web Server vs WAS

  • Web Server
    HTTP 요청을 받고, 사용자가 필요한 자료를 HTTP로 보내는 컴퓨터
  • WAS
    새로고침 할 때마다 새로운 페이지가 나타난다!

Web Server와 WAS의 차이점은 요청받아 처리하는 콘텐츠의 차이인데, Web Server는 정적 콘텐츠, WAS는 동적 콘텐츠를 처리한다.

정적 콘텐츠와 동적 콘텐츠를 쉽게 설명하자면 ...

  • 정적 콘텐츠(HTML, CSS, IMAGE)
    " 누가 접속하든 똑같구나! "
    url을 보고 웹 서버가 해당 파일을 가지고 있는지 확인하고 파일을 돌려준다.
  • 동적 콘텐츠 (JSP, ASP, PHP)
    " 요청의 내용에 따라 뭔가 추가적인 연산을 하고 새로고침할 때마다 새롭구나! "
    url을 보고 웹 서버는 웹 컨테이너에게 요청을 넘겨주고, 요청 주소에 맞는 컨트롤러를 찾아서 프로그래밍을 진행한다. 프로그래밍 결과로 나온 데이터를 템플릿 엔진(틀)에 반영한 새로운 웹 페이지를 돌려준다.

Nginx 웹 서버의 역할

Nginx는 Apache와 같이 웹 서버로 클라이언트 요청에 맞는 정적 파일을 응답해주는 Web Server로 사용되기도 하고, 동적인 리소스를 처리하기 위해 WAS로 요청을 전달해 주기도 한다. 이제 위에서 Web Server와 WAS에 대해 설명한 이유를 알겠죠 ?

대표적으로 Nginx가 하는 역할은 ...

1. 정적 파일을 처리하는 HTTP 서버로서의 역할
HTML, CSS, Javascript, 이미지와 같은 정보를 웹 브라우저에 전송하는 역할을 한다. (HTTP 프로토콜 준수)

2. 응용 프로그램 서버에 요청을 보내는 리버스 프록시로서의 역할
클라이언트가 가짜 서버에 요청하면, 프록시 서버가 리버스 서버로부터 데이터를 가져오는 역할을 한다.

WAS, 웹 어플리케이션 서버는 대부분 DB와 연결되어 있기 때문에 WAS가 최전방에 있으면 보안에 취약해진다. 이때 리버스 프록시를 두고 사용하면 웹 서버가 웹 어플리케이션 서버와 통신해서 결과를 클라이언트에 제공하는 방식으로 서비스를 하게 된다.

Proxy?

내부 네트워크에서 인터넷 접속을 할 때, 빠른 액세스나 안전한 통신을 확보하기 위한 중계 서버를 프록시 서버라고 한다. 프록시를 사용하는 이유는 보안을 강화할 수 있고, 통신 성능을 높여주기 때문이다. 프록시 유형은 프록시 서버의 위치에 따라 나뉘는데 이 글에서는 포워드 프록시리버스 프록시를 다루어 보려고 한다.

포워드 프록시(Forward Proxy)

포워드 프록시는 클라이언트 앞에 위치해서 클라이언트가 서버에 요청을 보내면 포워드 프록시가 해당 요청을 대신 받아서 서버에 전달해주고, 서버의 응답을 대신 받아서 클라이언트에게 전달해준다.

  • 포워드 프록시 장점
    • 클라이언트 보안: 포워드 프록시 서버를 방화벽 같은 개념으로 인터넷 사용 제한을 위해 사용해 특정 사이트에 접속하는 것을 막는다. (엔드포인트가 실제 서버 도메인)
    • 캐싱(액세스 고속화): 클라이언트가 어떤 웹 페이지에 접근하면 해당 페이지의 정보를 캐싱해서, 이후 동일한 페이지를 접근하면 캐시된 정보를 그대로 반환한다.
    • 암호화: 클라이언트의 요청은 포워드 프록시 서버를 통과할 때 암호화된다. 암호화된 요청은 다른 서버를 통과할 때 필요한 최소한의 정보만 갖게 되어서 클라이언트의 IP를 감춰준다.

리버스 프록시(Reverse Proxy)

리버스 프록시는 웹 서버들 앞에 위치해서 포워드 프록시와 마찬가지로 클라이언트의 요청을 받아 서버에 전달하고, 서버의 응답을 받아 클라이언트에게 전달한다.

  • 리버스 프록시 장점
    • 서버 보안: 프록시 서버로 인해 본래 서버의 IP를 노출시키지 않을 수 있다. (엔드포인트가 프록시 서버의 도메인)
    • 로드 밸런싱: 리버스 프록시 서버를 여러 개의 서버 앞에 두어 특정 서버가 과부화되지 않도록 분산해주기 때문에 대량의 트래픽을 감수할 수 있다.
    • 캐싱: 서버의 데이터를 캐싱하고 있다가 동일한 요청인 경우, 해당 데이터를 전달해 빠른 성능을 보여준다.
    • 암호화(SSL Offloading)

그림을 보고 "어? 그럼 Nginx는 어딨어?"라며 저랑 같은 생각을 하는 분이 있다면 ...
Nginx와 Apache 같은 웹 서버 프레임워크에서 프록시 기능을 쓸 수 있다고 이해하면 될 거 같아요 >__<!

포워드 프록시의 리버스 프록시 차이점

앞에서 말했듯이, 포워드 프록시는 클라이언트 앞에, 리버스 프록시는 웹 서버 앞에 놓여서 네트워크 구조상 어디에 위치하는지에 따라 유형이 나뉜다고 했다. 프록시는 어느 방향으로 데이터를 제공하는지에 따라서도 유형이 나뉠 수 있다.

포워드 프록시는 내부망에서 외부망으로 접근할 때 사용되어 클라이언트 쪽으로 데이터(response)를 밀어주고, 리버스 프록시는 외부망에서 내부망으로 접근할 때 사용되어 서버 쪽으로 데이터(response)를 밀어준다.

잘 생각해보면 포워드 프록시는 클라이언트의 대리, 리버스 프록시는 서버의 대리인 셈이다.

1개의 댓글

comment-user-thumbnail
2023년 7월 21일

웹 서버와 WAS의 차이, 정적 콘텐츠와 동적 콘텐츠, 그리고 Nginx 웹 서버의 역할에 대한 설명이 매우 명확하게 잘 쓰여져 있네요. 특히 프록시 서버의 개념이랑 그 장단점, 그리고 포워드 프록시와 리버스 프록시의 차이점을 이해하는 데 큰 도움이 되었습니다. 감사합니다.

답글 달기