엔진엑스(Nginx, 발음은 '엔진-X' 또는 '엔진익스')는 가볍고, 고성능을 자랑하는 웹 서버, 리버스 프록시, 그리고 이메일 프록시(POP3/IMAP)로 사용될 수 있는 소프트웨어입니다. 처음에는 웹 서버로 개발되었지만, 현재는 로드 밸런싱, HTTP 캐싱, 웹 서버 기능 등 다양한 기능을 제공하여, 대규모 웹 애플리케이션을 위한 강력한 프론트엔드 서버로 널리 사용되고 있습니다.
고성능: 엔진엑스는 비동기 이벤트 기반의 구조를 사용합니다. 이는 동시에 많은 연결을 효율적으로 처리할 수 있게 해줍니다. 따라서, 고적용량의 트래픽을 처리하는 데 매우 적합합니다.
리버스 프록시 및 로드 밸런싱: 엔진엑스는 리버스 프록시 서버로서의 기능을 제공합니다. 클라이언트의 요청을 받아, 이를 백엔드 서버로 전달하고, 그 결과를 다시 클라이언트에게 전달합니다. 이 과정에서 로드 밸런싱을 통해 트래픽을 여러 서버에 분산시킬 수 있습니다.
캐싱: 엔진엑스는 정적 파일(HTML, CSS, JavaScript 등)을 캐싱하여, 웹 페이지 로딩 시간을 단축시키고, 백엔드 서버의 부하를 줄일 수 있습니다.
보안 기능: SSL/TLS 암호화를 통한 보안 연결을 지원하며, 접근 제어, 인증 기능을 통해 웹 애플리케이션의 보안을 강화할 수 있습니다.
유연성과 확장성: 다양한 모듈을 통해 기능을 확장할 수 있으며, 강력한 구성 파일을 통해 사용자의 요구에 맞게 서비스를 세밀하게 조정할 수 있습니다.
엔진엑스는 그 유연성과 고성능으로 인해, 소규모 프로젝트부터 대규모 엔터프라이즈 환경까지 다양한 규모의 프로젝트에 사용됩니다.
리버스 프록시(reverse proxy)는 클라이언트와 서버 사이에 위치하여 클라이언트의 요청을 서버로 전달하고, 서버의 응답을 다시 클라이언트로 반환하는 중간자 역할을 합니다. 하지만 일반 프록시 서버가 클라이언트를 대신하여 서버에 요청하는 것과 달리, 리버스 프록시는 서버를 대신하여 클라이언트의 요청을 받아들입니다. 즉, 클라이언트는 마치 리버스 프록시가 실제 서버인 것처럼 요청을 보내고 응답을 받게 됩니다.
리버스 프록시의 주요 기능 및 장점은 다음과 같습니다:
여러 대의 서버에 요청을 분산시켜 각 서버에 걸리는 부하를 줄이고, 전체 시스템의 처리 능력을 높입니다. 이를 통해 서비스의 가용성과 성능을 향상시킬 수 있습니다.
리버스 프록시는 클라이언트와 실제 서버 사이의 중간자 역할을 하기 때문에, 외부에서는 실제 서버의 정보(IP 주소 등)를 알 수 없습니다. 이를 통해 서버를 직접적인 공격으로부터 보호할 수 있습니다.
SSL/TLS 암호화를 리버스 프록시에서 처리하게 함으로써, 서버의 부담을 줄이고 성능을 향상시킬 수 있습니다. 또한, 모든 트래픽을 암호화하여 보안을 강화할 수 있습니다.
리버스 프록시는 자주 요청되는 콘텐츠를 캐시에 저장하여, 동일한 요청이 들어올 때 빠르게 응답할 수 있습니다. 이를 통해 서버의 부하를 줄이고 응답 시간을 단축시킬 수 있습니다.
리버스 프록시에서 콘텐츠를 압축하여 클라이언트로 전송할 수 있습니다. 이를 통해 데이터 전송량을 줄이고, 로딩 시간을 단축시킬 수 있습니다.
SSL/TLS 암호화 및 복호화 과정을 리버스 프록시에서 처리하여, 웹 서버의 부하를 줄일 수 있습니다. 이를 통해 웹 서버의 성능을 향상시킬 수 있습니다.
리버스 프록시는 웹 애플리케이션의 성능과 보안을 향상시키는 데 중요한 역할을 합니다. Nginx, Apache HTTP Server, HAProxy 등 다양한 리버스 프록시 소프트웨어가 있으며, 각각의 특징과 설정 방법이 다릅니다.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install nginx
brew services start nginx
brew services stop nginx
brew services restart nginx
Node.js 애플리케이션을 실행하고 Nginx를 리버스 프록시로 설정하여 외부에서 Node.js 애플리케이션에 접근할 수 있도록 설정할 수 있습니다.
Node.js 애플리케이션을 실행할 포트(예: 3000)를 설정합니다.
Nginx 설정 파일을 수정합니다. 기본 경로는 /usr/local/etc/nginx/nginx.conf입니다. server 섹션 내에 있는 내용을 다음과 같이 수정하거나 추가합니다:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
brew services restart nginx
이제 http://localhost로 접속하면, Nginx가 Node.js 애플리케이션으로 요청을 전달하여 애플리케이션에 접근할 수 있습니다.