Día de Ruru
[BE] Nginx 공부하기 본문
proxy
클라이언트와 서버 간의 통신을 대리 수행하는 중계 서버이며 캐시, 보안, 트래픽 분산 등의 이유로 사용한다.
- Foward Proxy
- 캐싱 : 클라이언트가 요청한 내용을 캐싱
- 익명성 : Server는 응답 받은 요청을 누가 보냈는지 알 수 없다.
- → Server가 받은 요청 IP = Forward Proxy IP
- Reverse Proxy
- 캐싱
- 보안 : 서버 정보를 클라이언트로부터 숨길 수 있다.
- → 실제 서버의 IP 노출을 막을 수 있음
- 로드 밸런싱 (부하 분산) : 여러 대의 서버가 요청을 나누어 처리할 수 있도록 요청을 나누어 줄 수 있다.
Nginx 세팅하기
- 실행하기
실행시킨 후 curl로 테스트 해볼 수 있다.sudo systemctl start nginx sudo systemctl status nginx sudo systemctl restart nginx
curl -v http://localhost:80 #nginx 기본포트
- nginx는 demon 으로 실행되기 때문에 systemctl 로 서비스를 관리할 수 있다.
/etc/nginx
- worker_processes : 몇 개의 thread가 사용될 지 정의(CPU 코어 수에 맞추는 것을 권장)
- include : 외부 conf 파일을 가져올 때 사용
- → 모듈에 따라 다른 파일에 작성하고 include 해서 사용하기도 함
- events {} : 일반적인 connection process 설정
- worker_connections : worker process 하나 당 몇 개의 connection 을 처리할 지 설정
- http {} : HTTP traffic
- location : 처리할 URI 형식 표기
- nginx.conf 예시
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 2048;
}
http {
upstream servers {
server [ip:port];
server [ip:port];
}
server {
listen 80; # '/'경로로 오는 요청을 upstream 의 '/'경로로 포워딩
location / {
proxy_pass http://servers;
}
}
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
# include /etc/nginx/conf.d/*.conf;
}
- nginx를 설치하면
/etc/nginx
에 있는nginx.conf
파일을 수정해서 설정을 할 수 있다. - nginx는 4개의 로드 밸런싱 메서드를 제공한다.
- 라운드 로빈(Round-robin) : 모든 서버에 동등하게 요청 분산
upstream test_proxy { server web-01; server web-02; }
- least_conn : 연결이 가장 작은 서버로 요청을 보낸다.
upstream test_proxy { least_conn; server web-01; server web-02; }
- ip_hash : 클라이언트 IP 주소를 기준으로 요청 분배
upstream test_proxy { ip_hash; server web-01; server web-02; }
- hash : 유저가 정의한 key나 변수 혹은 이들의 조합을 해시해서 분산 (← ?)
upstream test_proxy { hash $request_uri consistent; server web-01; server web-02; }
[Nginx] 리버스 프록시(Reverse Proxy) 개념 및 사용법
'백엔드' 카테고리의 다른 글
[BE] SQL 테이블 내 중복 데이터 제거 (0) | 2024.04.21 |
---|---|
[BE] SQL 데이터 통계 조회 (0) | 2024.04.21 |
[BE] DNS란 무엇일까? (0) | 2023.08.06 |
Comments