Nginx 리버스 프록시란? 홈 서버에서 여러 서비스를 하나의 도메인으로 연결하는 방법

홈 서버에 서비스를 하나씩 추가하다 보면 어느 순간부터 접속 주소가 복잡해지기 시작합니다. 처음에는 서버 하나에 서비스 하나만 설치했기 때문에 내부 IP 주소와 포트 번호만 기억하면 크게 불편하지 않았습니다. 하지만 개인 클라우드, 미디어 서버, 웹사이트, 모니터링 서비스 등을 하나씩 추가하다 보니 각각 다른 포트 번호를 사용하게 되고 주소를 기억하는 것도 번거로워졌습니다. 저도 홈 서버를 처음 운영할 때는 각각의 포트를 직접 입력해서 접속했지만 서비스가 늘어나면서 보다 깔끔하게 관리할 방법을 찾게 되었습니다. 그때 알게 된 것이 Nginx 리버스 프록시였습니다. 이번 글에서는 Nginx 리버스 프록시가 무엇인지 알아보고, 홈 서버에서 여러 서비스를 하나의 도메인으로 연결하는 원리와 기본적인 구성 방법을 초보자의 관점에서 정리해 보겠습니다.

Nginx란 무엇인가?

Nginx는 웹 서버와 리버스 프록시 등 다양한 용도로 사용할 수 있는 서버 프로그램입니다.

웹 서버로 사용할 경우 웹 페이지나 파일을 사용자에게 전달하는 역할을 할 수 있습니다.

하지만 홈 서버에서는 리버스 프록시 기능을 활용하는 경우도 많습니다.

리버스 프록시는 외부에서 들어온 요청을 받아 실제 서비스를 실행하고 있는 내부 서버로 전달하는 역할을 합니다.

쉽게 말하면 사용자가 직접 여러 서비스에 접근하는 대신 Nginx가 중간에서 요청을 받아 적절한 서비스로 연결해 주는 구조입니다.

이 기능을 활용하면 하나의 서버에서 여러 서비스를 보다 깔끔하게 관리할 수 있습니다.

리버스 프록시란 무엇인가?

리버스 프록시라는 용어가 처음에는 어렵게 느껴질 수 있습니다.

간단하게 생각하면 사용자가 서버에 직접 접속하는 것이 아니라 중간에 있는 프록시 서버를 거쳐 내부 서비스에 접속하는 구조입니다.

예를 들어 하나의 홈 서버에서 개인 클라우드와 미디어 서버, 블로그를 각각 실행하고 있다고 가정해 보겠습니다.

각 서비스가 서로 다른 포트를 사용한다면 사용자는 서버 주소 뒤에 각각 다른 포트 번호를 입력해야 합니다.

리버스 프록시를 사용하면 사용자가 접속한 도메인이나 경로를 확인한 뒤 해당 요청을 알맞은 내부 서비스로 전달할 수 있습니다.

이렇게 하면 사용자가 실제 내부 서비스의 포트 번호를 직접 알 필요가 없어집니다.

홈 서버에서 리버스 프록시가 필요한 이유

홈 서버를 처음 구축할 때는 서비스 하나만 운영하는 경우가 많습니다.

하지만 서버를 계속 사용하다 보면 여러 서비스를 추가하게 됩니다.

예를 들어 개인 파일 관리 서비스와 사진 관리 서비스, 미디어 관리 서비스, 개인 웹사이트 등을 하나의 서버에서 실행할 수 있습니다.

이때 각 서비스에 서로 다른 포트를 사용하면 접속 주소가 복잡해질 수 있습니다.

리버스 프록시를 사용하면 이러한 서비스를 각각 다른 도메인이나 하위 도메인으로 연결할 수 있습니다.

예를 들어 하나의 도메인을 기준으로 개인 클라우드와 미디어 서비스, 블로그를 서로 다른 주소로 구성하는 방식입니다.

사용자는 기억하기 쉬운 도메인으로 접속하고 Nginx가 내부적으로 실제 서비스의 위치를 찾아 연결해 주는 구조입니다.

Nginx 리버스 프록시의 기본 구조

전체적인 구조는 생각보다 간단합니다.

사용자가 인터넷에서 자신의 도메인으로 접속합니다.

요청은 먼저 Nginx에 도착합니다.

Nginx는 사용자가 어떤 주소로 접속했는지 확인합니다.

그다음 미리 설정해 둔 규칙에 따라 해당 요청을 내부 네트워크의 특정 서비스로 전달합니다.

내부 서비스가 응답하면 Nginx가 다시 사용자에게 결과를 전달합니다.

사용자 입장에서는 하나의 도메인만 사용하는 것처럼 보이지만 실제 서버 내부에서는 여러 서비스가 각각 실행되고 있는 것입니다.

하나의 서버에서 여러 도메인 사용하기

Nginx 리버스 프록시의 대표적인 활용 방법은 하나의 서버에서 여러 도메인을 사용하는 것입니다.

예를 들어 자신의 도메인을 하나 가지고 있다면 하위 도메인을 이용해 서비스를 구분할 수 있습니다.

개인 클라우드는 별도의 하위 도메인으로 연결하고 미디어 서비스는 또 다른 하위 도메인으로 연결하는 방식입니다.

각 주소로 들어온 요청을 Nginx가 확인하고 해당 서비스로 전달합니다.

이 방식의 장점은 사용자가 복잡한 포트 번호를 기억하지 않아도 된다는 것입니다.

또한 서비스가 추가되더라도 도메인 규칙만 추가하면 기존 서버 구조를 크게 변경하지 않고 확장할 수 있습니다.

Nginx와 Docker를 함께 사용하는 이유

최근 홈 서버에서는 Docker를 이용해 여러 서비스를 실행하는 경우가 많습니다.

Docker를 사용하면 각각의 서비스를 별도의 컨테이너로 분리해 관리할 수 있습니다.

Nginx 역시 Docker 컨테이너로 실행할 수 있기 때문에 여러 서비스와 함께 구성하기 좋습니다.

예를 들어 하나의 홈 서버에서 Nginx 컨테이너와 개인 클라우드 컨테이너, 미디어 서버 컨테이너 등을 각각 실행할 수 있습니다.

Nginx는 외부에서 들어오는 요청을 받아 각각의 컨테이너로 전달하는 역할을 담당합니다.

이렇게 구성하면 서비스마다 환경을 어느 정도 분리하면서 하나의 서버에서 여러 서비스를 운영할 수 있습니다.

Nginx 리버스 프록시 설정에 필요한 정보

리버스 프록시를 구성할 때는 몇 가지 기본적인 정보를 알고 있어야 합니다.

먼저 외부에서 사용할 도메인이 필요합니다.

그리고 연결하려는 내부 서비스의 주소와 포트를 알아야 합니다.

예를 들어 홈 서버에서 특정 웹 서비스가 내부 네트워크의 특정 주소와 포트를 사용하고 있다면 Nginx가 해당 주소를 목적지로 사용하도록 설정할 수 있습니다.

Docker 환경이라면 컨테이너 이름이나 Docker 네트워크를 이용해 연결하는 방법도 있습니다.

처음에는 네트워크 구조가 복잡하게 느껴질 수 있지만 외부 주소와 내부 서비스의 위치를 연결하는 작업이라고 생각하면 이해하기 쉽습니다.

Nginx 설정은 어떻게 이루어질까?

Nginx에서는 특정 도메인으로 요청이 들어왔을 때 어디로 전달할지 설정할 수 있습니다.

예를 들어 특정 하위 도메인으로 요청이 들어오면 홈 서버 내부의 특정 서비스로 전달하도록 규칙을 만드는 방식입니다.

이때 중요한 것은 외부에서 사용하는 주소와 내부 서비스의 주소를 정확하게 구분하는 것입니다.

외부 사용자는 도메인만 보게 되지만 Nginx는 내부적으로 실제 서비스가 어디에서 실행되고 있는지 알고 있어야 합니다.

설정을 변경한 뒤에는 Nginx 설정에 문제가 없는지 확인하고 서비스를 다시 적용하는 과정도 필요합니다.

설정 파일의 작은 오타 하나만으로도 해당 서비스에 접속하지 못하는 문제가 발생할 수 있기 때문에 변경할 때는 하나씩 확인하는 것이 좋습니다.

HTTPS와 Nginx 리버스 프록시

Nginx 리버스 프록시를 공부하다 보면 HTTPS와 SSL 인증서도 함께 접하게 됩니다.

외부에서 홈 서버의 웹 서비스를 사용할 계획이라면 HTTPS를 적용하는 것이 좋습니다.

Nginx가 외부 사용자의 HTTPS 연결을 받아 내부 서비스로 전달하도록 구성할 수도 있습니다.

이 경우 각 서비스마다 HTTPS를 개별적으로 설정하는 대신 Nginx에서 인증서와 HTTPS 연결을 관리하는 방식으로 구성할 수 있습니다.

Let’s Encrypt 같은 무료 인증 기관을 이용하면 개인 홈 서버에서도 HTTPS 환경을 구성할 수 있습니다.

다만 인증서 발급과 갱신 과정은 사용하는 환경에 따라 달라질 수 있으므로 최신 공식 문서를 확인하는 것이 좋습니다.

리버스 프록시를 사용하면 포트 번호가 사라지는 이유

많은 초보자가 궁금해하는 부분이 바로 포트 번호입니다.

리버스 프록시를 사용한다고 해서 내부 서비스의 포트가 실제로 없어지는 것은 아닙니다.

서비스는 여전히 자신이 사용하는 내부 포트에서 실행됩니다.

다만 외부 사용자는 Nginx가 사용하는 웹 접속 경로로 접근하게 됩니다.

Nginx가 외부 요청을 받아 내부 서비스의 포트로 전달하기 때문에 사용자가 내부 포트 번호를 직접 입력하지 않아도 되는 것입니다.

따라서 리버스 프록시는 포트를 없애는 기술이라기보다는 외부에서 접근하는 방식과 내부 서비스의 연결 구조를 정리해 주는 기술이라고 이해하는 것이 정확합니다.

Nginx 리버스 프록시를 사용할 때 주의할 점

리버스 프록시는 홈 서버를 편리하게 만들어 주지만 외부에 공개하는 서비스가 많아질수록 관리해야 할 부분도 늘어납니다.

사용하지 않는 서비스는 외부에 공개하지 않는 것이 좋습니다.

또한 관리자 페이지나 개인 데이터가 포함된 서비스는 접근 제어와 계정 보안을 함께 고려해야 합니다.

Nginx와 운영체제, Docker, 연결된 웹 서비스도 최신 상태로 유지하는 것이 좋습니다.

특히 설정을 잘못하면 의도하지 않은 서비스가 외부에 노출될 수도 있기 때문에 새로운 서비스를 추가할 때마다 실제 외부 접속 범위를 확인하는 습관을 들이는 것이 좋습니다.

Nginx 리버스 프록시와 포트 포워딩의 관계

Nginx를 사용한다고 해서 공유기의 포트 포워딩이 반드시 필요 없어지는 것은 아닙니다.

일반적인 홈 서버 환경에서는 외부의 웹 요청이 먼저 공유기를 거쳐 홈 서버로 들어와야 하기 때문에 네트워크 구조에 따라 포트 포워딩이 필요할 수 있습니다.

예를 들어 외부의 웹 요청을 홈 서버의 웹 서비스로 전달하고 그다음 Nginx가 내부의 여러 서비스로 연결하는 구조를 만들 수 있습니다.

반면 Cloudflare Tunnel과 같은 방식을 사용하면 공유기에서 외부 포트를 직접 열지 않고 Nginx와 함께 외부 접속 환경을 구성하는 방법도 있습니다.

따라서 포트 포워딩과 리버스 프록시는 서로 완전히 같은 기능이 아니라 서로 다른 역할을 담당한다고 이해하면 좋습니다.

Nginx 설정이 잘 되지 않을 때 확인할 부분

리버스 프록시를 설정한 뒤 접속이 되지 않는다면 여러 가지 원인이 있을 수 있습니다.

먼저 Nginx 자체가 정상적으로 실행되고 있는지 확인합니다.

그다음 도메인이 올바른 서버를 가리키고 있는지 확인합니다.

Nginx가 연결하려는 내부 서비스가 정상적으로 실행되고 있는지도 확인해야 합니다.

Docker를 사용하는 경우 Nginx 컨테이너와 대상 서비스 컨테이너가 서로 통신할 수 있는 네트워크에 연결되어 있는지도 확인할 필요가 있습니다.

마지막으로 HTTPS를 사용한다면 인증서와 도메인 설정도 함께 확인해야 합니다.

처음부터 모든 설정을 한꺼번에 변경하기보다는 하나의 서비스만 연결한 상태에서 정상적으로 작동하는지 확인하는 것이 문제를 해결하기 쉽습니다.

처음 리버스 프록시를 구성한다면

홈 서버 초보자라면 처음부터 여러 서비스를 연결하지 않는 것을 추천합니다.

먼저 하나의 웹 서비스를 홈 서버에서 정상적으로 실행합니다.

그다음 Nginx를 설치하고 해당 서비스 하나만 연결합니다.

내부 네트워크에서 정상적으로 접속되는지 확인한 다음 도메인을 연결합니다.

이후 HTTPS를 적용하고 외부 네트워크에서도 정상적으로 접속되는지 확인합니다.

하나의 서비스가 안정적으로 작동한 뒤 두 번째 서비스를 추가하면 문제가 발생했을 때 원인을 찾기도 훨씬 쉽습니다.

이 과정을 반복하다 보면 도메인과 포트, 내부 네트워크, 리버스 프록시의 관계를 자연스럽게 이해할 수 있습니다.

마무리

홈 서버를 처음 운영할 때는 서비스마다 다른 포트 번호를 직접 입력하는 것도 크게 불편하지 않았지만, 여러 서비스를 사용하기 시작하면서 접속 주소를 정리할 필요성을 느끼게 됩니다. 저 역시 서비스가 하나씩 늘어날수록 어떤 포트를 사용하고 있는지 기억하는 것이 번거로워졌고, Nginx 리버스 프록시를 알아보면서 외부에서 사용하는 주소와 서버 내부의 서비스를 분리해서 관리할 수 있다는 점이 상당히 편리하게 느껴졌습니다. 특히 Docker와 함께 사용하면 여러 서비스를 각각 컨테이너로 관리하면서 Nginx를 통해 외부 접속 경로를 하나로 정리할 수 있습니다. 처음에는 도메인, 포트, 프록시라는 용어 때문에 복잡하게 느껴질 수 있지만 하나의 서비스만 연결해 보면 구조를 쉽게 이해할 수 있습니다. 이후 필요한 서비스들을 하나씩 추가하고 HTTPS까지 구성하면 더욱 깔끔한 홈 서버 환경을 만들 수 있습니다. 홈 서버에서 여러 서비스를 운영할 계획이라면 Nginx 리버스 프록시는 한 번쯤 공부해 볼 가치가 있는 기술입니다.

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.