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를 쓸까?
장점들:
- 포트 숨기기: 사용자는 80번 포트로만 접속, 실제 앱은 3000번에서 실행
- SSL/HTTPS: nginx에서 SSL 처리하고, 내부 앱은 HTTP로 통신
- 로드 밸런싱: 여러 서버로 요청 분산
nginx
upstream backend {
server localhost:3000;
server localhost:3001;
server localhost:3002;
}
server {
location / {
proxy_pass http://backend; # 3개 서버로 분산
}
}
- 여러 앱 통합: 한 도메인에서 여러 앱 서비스
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 |