[Nginx] nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
server_name 127.0.0.1;
client_max_body_size 2M;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
엔진엑스를 웹 서버로 사용하는 nginx.conf 설정파일이다.
user : 엔진엑스가 실행될 때 사용할 시스템 사용자를 지정한다.
worker_processes : 엔진엑스가 생성할 워커 프로세스의 수로 보통 CPU 코어 수와 일치시킨다
error_log : 에러 로그의 위치와 로깅 레벨을 지정한다.
worker_connections : 각 워커 프로세스가 동시에 열 수 있는 최대 연결 수이다.
worker_process가 2개, 서버가 2개의 CPU를 코어를 사용하고 worker_connections가 100인 경우 최대 200개의 동시 연결을 처리할 수 있다.
include : 다른 설정 파일의 내용을 현재 파일에 포함시킨다.
MIME 타입같은 특정 설정 섹션 별도의 파일로 분리해서 관리할 때 사용한다.
default_type : 파일의 MIME 타입을 결정할 수 없을 때 사용할 기본 MIME 타입을 지정한다.
include와 함께 사용해 파일의 MIME 타입을 효과적으로 관리한다.
listen : 서버가 연결을 받을 포트를 지정한다.
server_name : 서버의 도메인 네임 또는 IP 주소를 지정한다.
location / : 루트 URL에 대한 처리를 정의한다. 정적 파일을 제공할 디렉토리와 인덱스 파일을 지정하기도 한다.
error_page : 특정 HTTP 오류에 대한 사용자 정의 에러 페이지를 설정한다.
리액트로 만든 프론트엔드 웹 애플리케이션을 빌드한 후 빌드 결과를 root 명령어로 지정해주면 엔진엑스 웹 서버는 클라이언트에게 SPA 애플리케이션을 제공할 수 있다.
http {
upstream backend_server1 {
#ip_hash;
server backend1.example.com;
server backend2.example.com;
}
upstream backend_server2 {
server backend3.example.com;
server backend4.example.com;
}
server {
listen 80;
server_name 127.0.0.1;
location / {
proxy_pass http://backend_server1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /app1 {
proxy_pass http://backend_server2;
}
location /admin {
return 403;
}
}
}
events { }
Layer 7 에서 엔진엑스를 HTTP 트래픽을 처리하는 리버스 프록시로 사용하는 nginx.conf 설정 파일의 예시이다.
upstream : 여러 서버로 구성된 서버 그룹을 정의하고, 엔진엑스가 요청을 분산할 백엔드 서버들의 목록을 포함한다.
proxy_pass : http://backend_server1 로 들어오는 모든 요청을 upstream에 정의된 backend_server1 서버 그룹에 전달한다.
이 때 프록시된 요청과 함께 전송될 헤더를 정의할 수 있는데, 클라이언트의 원래 IP 주소, 요청된 호스트 명 등을 백엔드 서버로 전달할 때 사용한다.
ip_hash : 로드밸런싱 전략을 설정한다.
ip_hash 전략은 클라이언트의 IP 주소를 기반으로 백엔드 서버를 선택하는데, 같은 클라이언트의 모든 요청은 같은 백엔드 서버로 보내 Sticky Session을 보장한다.
사용자별 세션 정보를 유지해야 하는 애플리케이션에서 사용된다.
ip_hash를 사용하지 않으면 엔진엑스는 기본적으로 모든 서버에 순차적으로 요청을 전달하는 라운드 로빈 전략을 사용한다.
예시에서는 경로를 분할해 app1으로 들어오는 요청은 다른 backend_server2 upstream으로 프록시되도록 설정했다.
엔진엑스를 통해서 백엔드 서버로 접속하는 경우 관리자 페이지에 접속할 수 없도록 /admin 요청에 대해서는 403 Forbidden 응답을 반환한다.
stream {
upstream allbackend {
server 127.0.0.1:2222;
server 127.0.0.1:3333;
server 127.0.0.1:4444;
server 127.0.0.1:5555;
}
server {
listen 80;
proxy_pass allbackend;
}
}
events { }
Layer 4에서 엔진엑스를 TCP 트래픽을 처리하는 프록시 서버로 사용하는 예시이다.
stream : Layer 4 네트워킹 관련 설정을 나타낸다. TCP/UDP 세션을 처리할 수 있다.
upstream : 마찬가지로 백엔드 서버 그룹을 정의한다.
각 서버는 TCP 트래픽을 받을 백엔드 서버의 주소와 포트를 정의한다.
Layer 4에서는 엔진엑스는 TCP 프록시로 동작하고, 클라이언트와 백엔드 사이에서 TCP 연결을 중계한다.
클라이언트의 초기 연결을 받고, 해당 연결을 백엔드 서버 중 하나로 라우팅한다.
엔진엑스 서버 명령어를 정리해보자.
nginx : 기본적으로 /etc/nginx/nginx.conf 설정파일을 사용하고 단독으로 실행 시 엔진엑스가 실행된다.
nginx -s : stop으로 즉시 종료, quit으로 안전하게 종료, reload로 설정 파일을 불러온다.
nginx -t : 설정 파일의 문법을 검사한다. 설정 변경 후 서버 시작 전 사용하자.
nginx -v : 버전 확인
'Computer Science > Network' 카테고리의 다른 글
[Nginx] Timeout (0) | 2023.12.24 |
---|---|
[Network] 백엔드 아키텍처 (0) | 2023.12.21 |
[Nginx] 내부 구조와 리버스 프록시 (1) | 2023.12.21 |
[HTTP] HTTP 쿠키와 세션 (0) | 2023.06.12 |
[HTTP] 헤더 / 쿠키와 캐시 (0) | 2022.08.13 |
댓글
이 글 공유하기
다른 글
-
[Nginx] Timeout
[Nginx] Timeout
2023.12.24 -
[Network] 백엔드 아키텍처
[Network] 백엔드 아키텍처
2023.12.21 -
[Nginx] 내부 구조와 리버스 프록시
[Nginx] 내부 구조와 리버스 프록시
2023.12.21 -
[HTTP] HTTP 쿠키와 세션
[HTTP] HTTP 쿠키와 세션
2023.06.12