본문 바로가기
코딩/cpp

[nginx/포트폴리오 프로젝트] proxy_pass란 무엇인가

by 적막한숲 2025. 9. 30.

2025-09-03 서버 구축을 하고 있다.

어느정도 공부를 할 때 마다, 갱신할 예정이고 1년동안, html + css + nginx 및 기본적인 서버 및 client 구축 과정을 이해하기 위해서 진행하려고 하는 프로젝트이다.

 

나는 인공지능을 전공할 생각이지만, 네트워크를 하면 누군가와 연결이 된다는 점이 내게 있어 큰 매력으로 다가온다.

 

그 중 오늘은 proxy_pass를 사용하는 이유를 claude에게 물어봤다.

 

근데 proxy_pass가 뭐고 proxy_server가 뭐야? 그냥 설정하는거랑 이거랑 무슨 차이가 있어?

편집

좋은 질문이에요! 개념을 명확하게 설명해드릴게요.

proxy_pass란?

nginx를 "중간 다리" 역할로 만드는 설정이에요.

 
 
클라이언트 → nginx(프록시 서버) → 실제 애플리케이션 서버

일반 설정 vs proxy_pass 비교

1. 일반 설정 (정적 파일 서빙)

 
 
nginx
server {
    listen 8080;
    location / {
        root /data/www;  # 파일을 직접 읽어서 전달
    }
}

동작 방식:

  • 클라이언트가 요청
  • nginx가 직접 /data/www/index.html 파일을 읽음
  • 그 파일을 클라이언트에게 전달
  • nginx가 직접 처리

2. proxy_pass 사용

 
 
nginx
server {
    listen 80;
    location / {
        proxy_pass http://localhost:3000;  # 다른 서버로 전달
    }
}

동작 방식:

  • 클라이언트가 nginx(80 포트)에 요청
  • nginx는 요청을 받아서 localhost:3000에 다시 요청
  • localhost:3000에서 실행 중인 앱(예: Node.js)이 처리
  • 그 결과를 nginx가 받아서 클라이언트에게 전달
  • nginx는 중간 다리 역할

실제 사용 예시

예시 1: 블로그 (정적 파일)

 
 
nginx
server {
    listen 80;
    location / {
        root /var/www/blog;  # HTML, CSS, JS 파일 직접 서빙
    }
}

예시 2: Node.js 앱 (proxy_pass)

 
 
nginx
server {
    listen 80;
    server_name myapp.com;
    
    location / {
        proxy_pass http://localhost:3000;  # Node.js 앱으로 전달
    }
}

백그라운드에서 Node.js 앱이 3000번 포트에서 실행 중:

 
 
bash
node app.js  # localhost:3000에서 실행

왜 proxy_pass를 쓸까?

장점들:

  1. 포트 숨기기: 사용자는 80번 포트로만 접속, 실제 앱은 3000번에서 실행
  2. SSL/HTTPS: nginx에서 SSL 처리하고, 내부 앱은 HTTP로 통신
  3. 로드 밸런싱: 여러 서버로 요청 분산
 
 
nginx
upstream backend {
    server localhost:3000;
    server localhost:3001;
    server localhost:3002;
}

server {
    location / {
        proxy_pass http://backend;  # 3개 서버로 분산
    }
}
  1. 여러 앱 통합: 한 도메인에서 여러 앱 서비스
 
 
nginx
server {
    location / {
        proxy_pass http://localhost:3000;  # 메인 앱
    }
    
    location /api/ {
        proxy_pass http://localhost:4000;  # API 서버
    }
    
    location /admin/ {
        proxy_pass http://localhost:5000;  # 관리자 페이지
    }
}

Proxy Server란?

프록시 서버 = 중간에서 요청을 대신 전달해주는 서버

  • Forward Proxy: 클라이언트를 대신해서 요청 (VPN 같은 개념)
  • Reverse Proxy: 서버를 대신해서 요청 받음 ← nginx가 이것!

언제 뭘 써야 할까?

root 사용 (일반 설정):

  • HTML, CSS, JS 등 정적 파일만 있을 때
  • 단순 웹사이트, 블로그

proxy_pass 사용:

  • Node.js, Python, Java 등 실행 중인 앱이 있을 때
  • 동적 콘텐츠 (데이터베이스 조회, API 등)
  • 여러 서버를 하나로 묶고 싶을 때

정리

 
 
nginx
# 정적 파일 → nginx가 직접 처리
location / {
    root /data/www;
}

# 동적 앱 → nginx가 다른 앱에게 전달
location / {
    proxy_pass http://localhost:3000;
}

지금 상황에서는 단순히 HTML 파일을 보여주고 싶은 거니까 root를 쓰는 게 맞아요!

'코딩 > cpp' 카테고리의 다른 글

[nginx] 설치 법 및 설정 법  (0) 2025.09.30
[nginx] 초심자 가이드  (0) 2025.09.30
[백준]11724번  (0) 2025.09.29
[백준] 11279번  (0) 2025.09.29
[백준] 2805번  (0) 2025.09.28